[Java] 5.1.2 메서드 재정의(override)

5.1.2 메서드 재정의(override)

상속은 비슷한 형식의 공통적인 부분을 기반 형식으로 정의하고 이를 파생하여 다른 부분을 추가하거나 변경하는 문법입니다.

만약 기반 형식을 정의할 때 제공할 메서드는 공통적으로 정의할 수 있지만 메서드 내부에 정의할 구체적 알고리즘이 다를 때는 어떻게 해야 할까요? 이를 위해 OOP 언어에서는 재정의에 관한 문법을 제공하고 있습니다.

재정의란 기반 형식에 정의한 메서드를 파생 형식에서 구체적 행위를 다르게 정의하는 문법으로 파생 클래스에서 재정의할 메서드 앞에 @Override 키워드를 명시하여 정의합니다. 이렇게 파생 클래스에서 기반 형식의 메서드를 재정의하면 기반 형식에 정의한 메서드 이름은 무효화합니다.

[소스 5.3] 파생 클래스에서 기반 형식의 play 메서드를 재정의하는 예

public class Musician {
    public void play(){
        System.out.println("음악가 연주하다.");
    }
}
public class Pianist extends Musician{
    @Override public void play(){
        System.out.println("딩동댕");
    }
}
public class Program {
    public static void main(String[] args){
        Pianist pianist = new Pianist();
        pianist.play();
    }
}

실행 결과

딩동댕

만약 파생 형식에서 무효화한 기반 형식의 메서드를 호출하고자 한다면 super 키워드를 이용하여 사용합니다.

[소스 5.4] 파생 클래스에서 무효화한 기반 클래스의 메서드 사용하는 예

public class Musician {
    public void play(){
        System.out.println("음악가 연주하다.");
    }
}
public class Pianist extends Musician {
    @Override public void play(){
        super.play();
        System.out.println("딩동댕");
    }
}
public class Program {
    public static void main(String[] args){
        Pianist pianist = new Pianist();
        pianist.play();
    }
}

실행 결과

음악가 연주하다.
딩동댕