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

Java에서 메서드를 선언하는 방법/생성자를 final로 정의했을 때는 무엇이 일어날까요?

메서드를 최종 메서드로 정의하면,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 에러

생성자를 final로 선언

상속에서, 클래스를 확장할 때만

다시 말해, 생성자는 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 에러