Официальные меры
Для выполнения этой задачи можно использовать ключевое слово «окончательное», предоставленное языком Java. Посмотрите на следующий пример исходного кода:
Кода -копия выглядит следующим образом:
// finaldemo.java
публичный финальный класс FinalDemo {
}
Давайте сделаем еще один класс ниже, который будет наследовать класс, объявленный выше. Ключевое слово «расширяет», предоставленное языком Java, позволит классу наследовать от существующего класса.
Кода -копия выглядит следующим образом:
// finaldemo2.java
Public Class FinalDemo2 расширяет FinalDemo {
}
После составления первого класса, если вы затем скомпилируете второй класс, компилятор JDK сообщает об ошибке, и вы получите следующее сообщение об ошибке:
Finaldemo2.java:1: не может унаследовать от финального финального
Public Class FinalDemo2 расширяет FinalDemo {}
^
1 ошибка
Теперь вы успешно помешали первым классам унаследовать другой класс с помощью официальных методов.
Неофициальные меры
Тем не менее, способ предотвращения унаследованных классов другими классами не является уникальным. Учитывая следующий код, я заявляю, что конструктор является частным, а также объявляю статический метод возврата объекта класса.
Кода -копия выглядит следующим образом:
открытый класс приваттест {
private privatetest () {
System.out.println ("Частный конструктор по умолчанию");
}
public static privatetest getInstance () {
вернуть новый privatetest ();
}
}
Модифицированный выше код называется «Одиночный шаблон», метод GetInstance всегда возвращает только один экземпляр этого класса. Но почему этот код не позволяет унаследовать класс? Рассмотрим следующий код, объявленный класс должен наследовать приведенный выше класс.
открытый класс PrivateTest2 Extends privatetest {
}
После составления первого класса, если вы затем скомпилируете второй класс, компилятор JDK сообщает об ошибке, и вы получите следующее сообщение об ошибке:
PrivateTest2.java:1: PrivateTest () имеет личный доступ в Privatetest
открытый класс PrivateTest2 Extends privatetest {
^
1 ошибка
Второй класс не может унаследовать первый класс. Но что означает ошибка? Язык Java требует, чтобы по крайней мере один метод компонента был предоставлен в классе. Если вы не предоставите какие -либо методы артефакта, JDK вставит в класс, который вы объявили. Другими словами, по умолчанию является метод компонента без параметров, пустого корпуса компонентов и разрешения на общедоступный доступ. Однако, если вы определяете метод компонента самостоятельно, компилятор JDK не будет вставлять такой метод компонента по умолчанию. Мы только что объявили метод компонентов по умолчанию в классе PrivateTest, но мы изменили разрешение по публичному доступу по умолчанию на частное разрешение, которое соответствует правилам проверки синтаксиса компилятора JDK.
Теперь давайте посмотрим на второй отдел. Язык Java также требует, чтобы вы вызвали метод компонентов Super Class на первой строке метода компонентов. Это необходимо, чтобы начать функции наследования. В Java мы выполняем эту задачу, вызывая метод Super (), который будет сопоставлен с методом компонентов SuperClass. Если вы не предоставите конструктор по умолчанию для SuperClass, компилятор JDK вставит метод суперкласса по умолчанию для вызова.
Мы только что объявили конструктор частным разрешением в первом классе. Теперь, когда мы наследуем этот класс от других классов, компилятор попытается вызвать метод суперкласса по умолчанию. Поскольку методы компонентов в сфере SuperClass объявляются как личное разрешение, компилятор сообщит об ошибке, в которой говорится, что методы SuperClass Component не могут быть вызваны. Поэтому мы мешаем унаследовать один класс другими классами неофициальными методами.
Усман Салим
Университет Мухаммеда Али Джинна
Электронная почта: [email protected]