Java/자바 정리

59. final 메서드 – 오버라이딩을 금지하기

코딩하는냥이 2025. 5. 7. 15:10
반응형

이번 글에서는 자바에서 오버라이딩을 금지하는 방법인 final 메서드를 학습합니다.
부모 클래스에서 중요한 기능이 변경되면 안 되는 경우,
final을 선언함으로써 자식 클래스가 해당 메서드를 재정의하지 못하게 막을 수 있습니다.


📦 부모 클래스 코드 (Car.java)

package ch07.sec05.exam02;

public class Car {
	public int speed;

	public void speedUp() {
		speed += 1;
	}

	public final void stop() {
		System.out.println("차를 멈춤");
		speed = 0;
	}
}

📦 자식 클래스 코드 (SportsCar.java)

package ch07.sec05.exam02;

public class SportsCar extends Car {
	public void speedUp() {
		speed += 10;
	}

	public void stop() {
		System.out.println("스포츠카를 멈춤");
		speed = 0;
	}
}

💬 코드 설명

  • Car 클래스의 stop() 메서드에는 final 키워드가 붙어 있음
    자식 클래스에서 오버라이딩(재정의) 불가능
  • SportsCar 클래스는 stop()을 다시 정의하려 했기 때문에
    컴파일 오류 발생
  • speedUp()은 final이 아니므로 오버라이딩 가능

🧨 오류 메시지 예시 (컴파일 시)

Cannot override the final method from Car

📌 간단 정리

키워드 설명
final 메서드 자식 클래스에서 오버라이딩 금지
오버라이딩 가능 final 없는 메서드만 재정의 가능
사용 목적 중요한 기능 보호, 설계 안정성 강화

💡 포인트 정리

  • final 메서드는 자식 클래스에서 수정할 수 없음
  • 중요한 동작(예: 정지, 저장 등)은 오버라이딩을 막아 안전성 확보
  • speedUp()은 오버라이딩 가능하지만 stop()은 금지됨
  • 클래스 자체에 final을 붙이면 상속 자체도 불가능