Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 슈퍼클래스의 final 메소드를 재정의하면 어떻게 될까요?

슈퍼클래스에서 final로 선언된 메소드는 서브클래스에서 재정의(오버라이드)할 수 없습니다. 만약 슈퍼클래스의 final 메소드를 강제로 재정의하려고 하면 Java 컴파일러는 오류를 발생시킵니다.

메소드 오버라이딩 구현 규칙

  • 재정의하려는 메소드의 선언부(메소드 이름, 매개변수, 반환 타입)는 원본 메소드와 동일해야 합니다.
  • 오버라이딩을 시도하기 전에 서브클래스가 반드시 다른 클래스(슈퍼클래스)를 상속(extends)하고 있어야 합니다.
  • 서브클래스는 슈퍼클래스의 final 메소드를 절대 재정의할 수 없습니다.

예제 코드

class Car {
    public void brake() {
        System.out.println("brake() method of Car");
    }
    public final void accelerate() {
        System.out.println("accelerate() method of Car");
    }
}
public class BenzCar extends Car {
    public static void main(String[] args) {
        BenzCar benz = new BenzCar();
        benz.accelerate();
        benz.brake();
    }
    public void accelerate() {
        System.out.println("accelerate() method of Benz Car");
    }
}

위 예제에서 서브클래스인 BenzCar가 슈퍼클래스 Carfinal 메소드인 accelerate()를 재정의하려고 하면, 컴파일러는 컴파일 오류를 발생시킵니다. 이처럼 Java에서는 슈퍼클래스의 final 메소드를 재정의하는 것이 허용되지 않으며, final 키워드는 해당 메소드의 동작이 변경되지 않도록 보장하는 역할을 합니다.

출력 결과

overridden method is final