오버라이딩(overriding)
- 하위클래스에서 상위클래스의 메소드를 리턴타입까지 동일하게 선언한 후, 재정의 하는 것을 의미합니다.
- 인스턴스 선언 시 상위클래스형으로 선언하면 모든 하위클래스로 생성이 가능합니다.
즉, 상위클래스형 인스턴스에는 하위클래스형 인스턴스가 들어갈 수 있습니다.
상위클래스형으로 선언된 인스턴스는 오직 상위클래스의 멤버에만 접근가능합니다.
(생성된 하위클래스의 멤버에는 접근 불가)
단, 오버라이딩된 메소드는 하위클래스로 접근가능합니다.
.
.
예제
class Speaker
{
private int volume;
public void showCurrentState(){
System.out.println("볼륨 크기 : " + volume);
}
public void setVolume(int vol){ volume = vol; }
}
class BaseSpeaker extends Speaker
{
private int base;
public void showCurrentState(){
// 상위클래스의 멤버를 그대로 가져와 재정의한 오버라이딩
super.showCurrentState();
// 오버라이딩하면 하위클래스의 메소드가 실행되므로 상위클래스의 메소드를 호출하면 하위클래스의 메소드에서 super키워드를 사용해야 함
System.out.println("베이스 크기 : " + base);
}
public void setBaseVolume(int b){ base = b; }
}
class Overriding
{
public static void main(String[] args)
{
BaseSpeaker bs = new BaseSpeaker();
bs.setVolume(10);
bs.setBaseVolume(20);
bs.showCurrentState();
// 오버라이딩된 메소드를 호출하면 하위클래스에 있는 오버라이딩된 메소드가 실행됨.
}
}
.
.
상위클래스에서 정의된 메소드를 하위클래스에서 같은 이름으로 재선언할 수 있다.
그렇게 되면 하위클래스에 있는 메소드로 실행된다.
상위클래스의 메소드까지 같이 실행시키고 싶으면 하위클래스에 오버라이딩된 메소드에 추가하면 된다.
728x90
반응형
'Java > 본격 Java 상속' 카테고리의 다른 글
[Java] InstanceOf 하위클래스 형변환 (0) | 2020.06.30 |
---|---|
[Java] 오버라이딩(overriding)과 오버로딩(overloading) (0) | 2020.06.30 |
[Java] 상속 has-a관계 (0) | 2020.06.29 |
[Java] 상속 is-a관계 (0) | 2020.06.29 |
[Java] static 상속 (0) | 2020.06.29 |