Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

7.5 부모 메소드 호출 - super. 본문

이것이 자바다/07 상속

7.5 부모 메소드 호출 - super.

빌드이너프 2024. 4. 2. 15:38

메소드를 재정의하면, 부모 메소드는 숨겨지고 자식 메소드만 사용되기 떄문에 비록 부모 메소드의 일부만 변경된다 하더라도 중복된 내용을 자식 메소드도 가지고 있어야 한다

부모 메소드가 100줄의 코드를 가지고 있을 경우, 자식 메소드에서 1줄만 추가하고 싶더라도 100줄의 코드를 자식 메소드에서 다시 작성해야 한다

 

이 문제는 자식 메소드와 부모 메소드의 공동 작업 처리 기법을 이용하면 해결된다

자식 메소드 내에서 부모 메소드를 호출하는 것인데, super 키워드와 도트(.) 연산자를 사용하면 숨겨진 부모 메소드를 호출할 수 있다

class Parent() {
  public void method() {
  //작업 처리1
  }
}
class Child extends Parent {
  @Override
  public void method() {
    super.method();
    //작업 처리2
  }
}

super.method()의 위치는 작업 처리2 전후에 어디든지 올 수 있다

우선 처리가 되어야 할 내용을 먼저 작성하면 된다

이 방법은 부모 메소드를 재사용함으로써 자식 메소드의 중복 작업 내용을 없애는 효과를 가져온다

 

 

예시

Airplane의 fly() 메소드를 자식 클래스인 SupersonicAirplane에서 오버라이딩 했다

일반 비행 모드일 때는 Airplane의 fly()를 사용

초음속 비행 모드일 때는 오버라이딩된 SupersonicAirplane의 fly()를 사용

package ch07.sec04.exam02;

public class Airplane {
	public void land() {
		System.out.println("착륙");
	}
	
	public void fly() {
		System.out.println("일반 비행");
	}
	
	public void takeOff() {
		System.out.println("이륙");
	}
}
package ch07.sec04.exam02;

public class SupersonicAirPlane extends Airplane {

	public static final int NORMAL = 1;
	public static final int SUPERSONIC = 1;
	
	public int flyMode = NORMAL;
	
	@Override
	public void fly() {
		if(flyMode == SUPERSONIC) {
			System.out.println("초음속 비행");
		} else {
			super.fly();	
		}		
	}
}