본문 바로가기

코딩/Java

자바 - 클래스의 메소드 오버라이드 못하게 하는 법 (final 키워드)

반응형

설계한 클래스를 상속은 가능하지만 해당 클래스의 특정 메소드만 수정(오버라이드)를 금지하고 싶을 때, final 키워드를 사용한다.

 

예시: final 키워드 없는 메소드

class Phone {
    public void charge() {
        System.out.println("충전");
    }
}

Phone 클래스는 charge() 메소드를 지닌다.

Phone 클래스를 상속한 클래스들은 charge() 메소드를 사용할 수 있고 charge() 메소드를 오버라이드 할 수 있다.

 

만약 Phone 클래스를 설계한 개발자가 Phone 클래스의 charge() 메소드 코드를 상속한 클래스에서도 동일한 charge() 메소드 코드로 유지시키고 싶으면 final 키워드를 삽입하면 된다.

 

예시: final 키워드가 붙은 메소드

class Phone {
    public final void charge() {
        System.out.println("충전");
    }
}

class Galaxy extends Phone {
    @Override
    public final void charge() { // error: charge() in Galaxy cannot override charge() in Phone
        System.out.println("갤럭시 충전");	
    }
}

Galaxy 클래스가 Phone 클래스를 상속했다.

Galaxy 클래스에서 이미 final로 명시된 charge() 메소드를 오버라이딩할 경우 컴파일 시, 위와 같은 에러가 난다.

반응형