반응형
이번 글에서는 자바에서 오버라이딩을 금지하는 방법인 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을 붙이면 상속 자체도 불가능
'Java > 자바 정리' 카테고리의 다른 글
62. 다형성 (Polymorphism) – 부모 타입으로 자식 객체 참조하기 (0) | 2025.05.07 |
---|---|
61. 자동 타입 변환 (Promotion) - 상속 관계에서의 업캐스팅 (0) | 2025.05.07 |
60. protected 접근 제한자 - 상속과 패키지에 따른 접근 제어 (0) | 2025.05.07 |
[ 간단 정리 57+ ] 자바, 오버라이딩과 오버로딩의 차이점 (0) | 2025.05.07 |
58. super 키워드로 부모 메서드 호출하기 (오버라이딩 활용) (0) | 2025.05.02 |
57. 메서드 오버라이딩(Method Overriding) (0) | 2025.05.02 |