English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Что happens, когда метод/конструктор в Java объявлен final?

Если вы определите метод как конечный, то вы не сможетеПерекрытие Это означает, что вы не можете предоставить реализацию конечного метода суперкласса из подкласса.

То есть, цель сделать метод конечным — это предотвратить его модификацию извне (в подклассе).

Но если вы пытаетесь перегрузить конечный метод, будет сгенерирован компиляторная ошибка.

Пример

interface Person{
   void dsplay();
}
class Employee implements Person{
   public final void dsplay() {
      System.out.println("Это метод отображения класса Employee");
   }
}
class Lecturer extends Employee{
   public void dsplay() {
      System.out.println("Это метод отображения класса讲师");
   }
}
public class FinalExample {}}
   public static void main(String args[]) {
      Lecturer obj = new Lecturer();
      obj.dsplay();
   }
}

Результат вывода

Employee.java:10: ошибка: dsplay() в Lecturer не может Override dsplay() в Employee
public void dsplay() {
            ^
override method is final
1 ошибка

Объявить конструктор как final

В наследовании, если вы расширите класс. Подкласс наследует все члены суперкласса, за исключением конструктора.

Иными словами, конструктор в Java не может наследоваться, поэтому вы не можетеПерекрытиеКонструктор.

Таким образом, использование final до конструктора毫无 смысла. Таким образом, Java не позволяет использовать ключевое слово final до конструктора.

Если попытаться сделать это, то финальный конструктор будет генерировать ошибку во время компиляции, которая гласит: "Здесь не допускается использовать модификатор final".

Пример

В следующем примере Java класс Student имеет финальный конструктор.

public class Student {
   public final String name;
   public final int age;
   public final Student() {
      this.name = "Raju";
      this.age = 20;
   }
   public void display() {
      System.out.println("Имя студента: " + this.name);
      System.out.println("Возраст студента: " + this.age);
   }
   public static void main(String args[]) {
      new Student().display();
   }
}

Ошибка компиляции

Во время компиляции, вышеуказанный код генерирует следующую ошибку.

Student.java:6: ошибка: modifier final не допускается здесь
   public final Student() {
               ^
1 ошибка