English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
메서드를 최종 메서드로 정의하면,override 그것은 다시 말해, 상위 클래스의 최종 메서드에 대한 구현을 서브 클래스에서 제공할 수 없다는 것입니다.
즉, 메서드를 최종 메서드로 만드는 목적은 외부(서브 클래스)에서 메서드를 수정하지 못하도록 하는 것입니다.
그러나, 최종 메서드를 대체하려고 시도하면 컴파일 시 오류가 발생합니다.
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: error: dsplay() in Lecturer cannot override dsplay() in Employee public void dsplay() { ^ override method is final 1 에러
상속에서, 클래스를 확장할 때만
다시 말해, 생성자는 Java에서 상속할 수 없기 때문에, 다음과 같은 것을 할 수 없습니다.override생성자
따라서, final을 생성자 전에 작성하는 것은 의미가 없습니다. 따라서 Java는 생성자 전에 final 키워드를 사용하지 않도록 합니다.
이렇게 하려고 하면 생성자를 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: error: modifier final not allowed here public final Student() ^ 1 에러