본문 바로가기

Java/본격 Java 상속

[Java] 오버라이딩(overriding)

오버라이딩(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
반응형