Классы Apex и классы Java работают одинаково, но есть некоторые существенные различия.

Вот основные различия между классами Apex и классами Java:

  • Внутренние классы и интерфейсы могут быть объявлены только на одном уровне внутри внешнего класса.
  • Статические методы и переменные могут быть объявлены только в определении класса верхнего уровня, а не во внутреннем классе.
  • Внутренний класс ведет себя как статический внутренний класс Java, но не требует ключевого слова static. Внутренний класс может иметь переменные-члены экземпляра, как и внешний класс, но неявный указатель на экземпляр внешнего класса (с использованием ключевого слова this) отсутствует.
  • Модификатор закрытого доступа используется по умолчанию и означает, что метод или переменная доступны только в пределах класса Apex, в котором они определены. Если вы не укажете модификатор доступа, метод или переменная будут частными.
  • Отсутствие модификатора доступа для метода или переменной и модификатор закрытого доступа являются синонимами.
  • Модификатор общего доступа означает, что метод или переменная может использоваться любым приложением Apex в этом приложении или пространстве имен.
  • Модификатор глобального доступа означает, что метод или переменная может использоваться любым кодом Apex, имеющим доступ к классу, а не только кодом Apex в том же приложении. Этот модификатор доступа следует использовать для любого метода, на который необходимо ссылаться вне приложения, либо в API SOAP, либо в другом коде Apex. Если вы объявляете метод или переменную глобальными, вы также должны объявить класс, который их содержит, глобальным.
  • Методы и классы являются окончательными по умолчанию.
  • Модификатор виртуального определения позволяет расширение и переопределение.
  • Ключевое слово override должно явно использоваться в методах, которые переопределяют методы базового класса.
  • Методы интерфейса не имеют модификаторов — они всегда глобальны.
  • Классы исключений должны расширять либо исключение, либо другое определяемое пользователем исключение.
  • Их имена должны заканчиваться словом «исключение».
  • Классы исключений имеют четыре встроенных неявных конструктора, хотя вы можете добавить и другие.
  • Классы и интерфейсы могут быть определены в триггерах и анонимных блоках, но только как локальные.