반응형
오버라이딩을 제한하는 final
부모 클래스의 메서드 오버라이딩을 막기 위해 메서드 앞에 final 키워드를 붙여 사용한다.
final이 붙은 메서드는 자식 클래스에서 오버라이딩을 할 수 없고 부모 클래스에서 정의한 대로 사용해야 한다. 주로 static과 함께 클래스 변수를 상수처럼 지정하는 데 사용된다.
즉, final이 붙은 필드와 메서드는 말 그대로 마지막이 되므로 상속이 불가능하고 마지막 변수 값을 갖기 때문에 값의 수정이 불가능하게 된다.
예시 코드
class TestCarSetting {
int testCarSettingSpeed = 0;
final void upSpeed(int testCarSettingSpeed) {
this.testCarSettingSpeed += testCarSettingSpeed;
}
}
TestCarSetting 클래스는 부모 클래스이다.
부모 클래스에서 Speed를 0으로 설정해 주고
final을 통해 upSpeed 메서드를 만들어 준다.
class Sedan extends TestCarSetting {
final static String TestCarType = "승용차";
void upSpeed(int testCarSettingSpeed){
this.testCarSettingSpeed -= testCarSettingSpeed;
}
}
Sedan은 TestCarSetting 클래스를 상속 받은 자식 클래스이다.
Sedan 클래스에서 final을 통해 변경을 하지 못 하도록 막아준다.
그리고 아래에서 upSpeed() 메서드를 재정의를 시도해 본다.
public class TestCar {
public static void main(String[] args) {
System.out.println("Sedan 클래스 타입 => " + Sedan.TestCarType);
}
}
바로 Sedan의 TestCarType를 출력해 보면
오류를 보면 재정의 할 수 없다고 나온다.
class sedan extends TestCarSetting {
final static String TestCarType = "승용차";
/* void upSpeed(int testCarSettingSpeed){
this.testCarSettingSpeed -= testCarSettingSpeed;
}*/
}
이번에는 재정의한 부분을 주석처리하고 다시 돌려본다.
정상적으로 출력이 되는 것을 볼 수 있다.
이렇게 final로 지정된 메서드나 변수는 따로 변경이 불가능하고 말 그대로 마지막으로 정의 된 무언가이기 때문에 있는 그대로 사용해야 한다.
반응형
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java] : 인터페이스, interface (0) | 2022.01.17 |
---|---|
[Java] : 추상 클래스, abstract class란? (0) | 2022.01.17 |
[Java] : method overriding (0) | 2022.01.17 |
[Java] : 상속을 허용하는 protected (0) | 2022.01.17 |
[Java] : 상속을 제한하는 private (0) | 2022.01.17 |
댓글