부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다.= 변수는 자식 객체를 참조하지만 변수로 접근 가능한 멤버는 부모 클래스 멤버로만 한정된다. 

 

하지만, 메소드가 자식 클래스에서 오버라이딩되었다면 자식 클래스의 메소드가 대신 호출된다.

 

부모 클래스

package sec07.exam02_promotion_access_YJ;

public class Parent {
	//메소드
	public void method1() {
		System.out.println("부모 메소드 1");
	}
	
	public void method2() {
		System.out.println("부모 메소드 2");
	}
}

 

자식 클래스

package sec07.exam02_promotion_access_YJ;

public class Child extends Parent {
	//메소드
	@Override //부모 메소드 2 재정의
	public void method2() {
		System.out.println("자식 메소드 2");
	}
	
	public void method3() {
		System.out.println("자식 메소드 3");
	}
}

 

자동 타입 변환 후의 멤버 접근

package sec07.exam02_promotion_access_YJ;

public class ChildExample {
	public static void main(String[] args) {
		Child child = new Child();
		Parent parent = child;
		//Parent parent = new Child(); 와 같음
		
		parent.method1();
		parent.method2(); //자식클래스에서 재정의된 메소드가 호출
		//자식클래스에서 오버라이딩 된 메소드는 부모클래스에서 숨겨짐
		child.method2(); // = parent.method2();
		//parent.method3(); //호출 불가
	}
}
부모 메소드 1
자식 메소드 2
자식 메소드 2

+ Recent posts