Apex — мощный объектно-ориентированный язык программирования, используемый при разработке Salesforce. При работе с классами Apex возникает один распространенный вопрос: «Являются ли классы окончательными по умолчанию?» В этой статье блога мы углубимся в поведение классов по умолчанию в Apex, изучим концепцию конечных классов и предоставим примеры кода для демонстрации различных методов расширения и изменения классов.
Поведение по умолчанию:
По умолчанию классы Apex не помечаются как окончательные. Это означает, что они могут быть расширены и унаследованы другими классами. В Apex ключевое слово «final» используется для обозначения того, что класс не может быть расширен или переопределен. Однако если вы явно не укажете ключевое слово «final» при определении класса, он будет открыт для расширения.
Расширение классов Apex.
Чтобы расширить класс Apex, вы можете просто создать новый класс, который наследуется от базового класса. Давайте рассмотрим пример, где у нас есть базовый класс под названием «Транспортное средство»:
public class Vehicle {
public String name;
public Vehicle(String name) {
this.name = name;
}
public void startEngine() {
System.debug('Starting the engine of ' + name);
}
}
Теперь давайте создадим подкласс под названием «Автомобиль», который расширяет класс «Транспортное средство»:
public class Car extends Vehicle {
public Car(String name) {
super(name);
}
public void drive() {
System.debug('Driving ' + name);
}
}
В этом примере класс «Car» наследует свойство «name» и метод «startEngine()» от класса «Vehicle» и вводит собственный метод «drive()».
Изменение классов Apex:
Если класс не помечен как окончательный, он может быть изменен другими классами. Допустим, у нас есть другой класс под названием “RaceCar”, которому необходимо изменить поведение метода startEngine():
public class RaceCar extends Vehicle {
public RaceCar(String name) {
super(name);
}
public override void startEngine() {
System.debug('Starting the engine of ' + name + ' with a roar!');
}
}
В этом примере класс RaceCar расширяет класс Vehicle и переопределяет метод startEngine(), обеспечивая собственную реализацию.
В заключение, классы Apex по умолчанию не являются окончательными, что позволяет их расширять и изменять. Такая гибкость позволяет разработчикам опираться на существующие классы, создавать иерархии и настраивать поведение в соответствии с требованиями своего приложения. Понимая поведение классов по умолчанию в Apex, разработчики могут эффективно использовать наследование и расширяемость для написания модульного и многократно используемого кода.