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