Skip to content

Day 18(21.09.30)

Byeong Gwan Seo edited this page Sep 30, 2021 · 2 revisions

※ 오늘은 전체적으로 배운 내용들을 되짚어보는 날이었기에, 공부하며 이해가 부족했었던 부분을 다시 짚어보고자 한다.

25. 자동 타입 변환(Promotion) in 상속

(1) 자동 타입 변환(Promotion)이란?

프로그램 실행 도중에 자동으로 타입 변환이 일어나는 것을 말하는데, 아래와 같이 사용된다.

부모클래스 변수 = 자식클래스타입;

위와 같이 사용했을 때, 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일한 취급을 받게 된다. 아래 예시에서 살펴보자.

public class Parent {
    public void method1() {
	System.out.println("Parent-method1()");
	}
	
    public void method2() {
	System.out.println("Parent-method2()");
	}
}
public class Child extends Parent{
	@Override
	public void method2() {
		System.out.println("Child-method2()");
	}
	
	public void method3() {
		System.out.println("Child-method3()");
	}
}
public class ChildExample {
    public static void main(String[] args) {
	Child child = new Child();
		
	Parent parent = child; // but, 자동 타입 변환 실행 (Child to Parent)
	parent.method1();
	parent.method2();
		
	System.out.println(parent == child);
	parent.method3(); // 컴파일 에러
		
		
	}
}

Result

Parent-method1()
Child-method2()
true

여기서 parent 참조변수가 Parent 타입이니 당연히 Parnet 인스턴스를 참조하는 것이 맞는 것으로 보일 수 있으나, 위 결과에서 확인할 수 있듯이 parent 뿐만 아니라 child 참조변수도 동일한 인스턴스를 참조하고 있다는 것을 볼 수 있다. 이렇게 Child 인스턴스가 Parent 변수에 대입되어 자동형변환 된 것이다.
그리고, 자동타입변환의 중요한 특징은, 자식 클래스가 부모 타입으로 자동으로 변환된 이후에는 부모 클래스에 선언된 필드와 메소드에만 접근 가능하다는 것이다. 변수는 자식 인스턴스를 참조하지만 변수로서 접근 가능한 멤버는 부모 클래스 멤버로만 한정된다는 뜻인데, 위 예시에서 볼 수 있듯이, 자식 클래스에만 있는 method3()를 호출하려고 하면 컴파일 에러가 발생한다. 다만, 자식 클래스에서 재정의(Override)된 메소드가 있다면 자식 클래스의 메소드가 대신 호출된다.

Clone this wiki locally