본문 바로가기

Programming/JAVA

인터페이스(8) - 인터페이스의 타입 변환과 다형성 2

java logo image

 

 

 

 

○ 자동 타입 변환(promotion)

 

상속 체계 하에서의 타입 변환과 마찬가지로, 구현 객체가 자식 클래스의 포지션에서 인터페이스 타입으로 변환되는 것이 자동 타입 변환에 해당하게 됩니다. 여기는 기존의 클래스 상속 관련 내용을 잘 이해하고 있다면 특별할 것이 없습니다. 

 

인터페이스타입 변수 = 구현객체;
Remotecontrol rc = new Audio();

 

한 가지 더 생각할 점이 있습니다. 만일, 어떤 클래스 A가 특정 인터페이스를 구현한 클래스인데 - 이 클래스 A를 상속하는 자식 클래스 B가 있다면 타입 변환은 이루어질까요? 정답은 '타입 변환이 이뤄진다'입니다. 자식 클래스 타입 B를 인터페이스 변수에 대입한다면, 자동 타입 변환이 동일하게 이루어집니다. 

 

 


 

 

기존에 클래스의 부모 자식관계 상속 학습 과정에서 Tire 클래스와 이를 상속하는 KumhoTire, HankookTire 사례를 알아보았습니다. 이번에도 인터페이스와 이를 구현하는 클래스를 활용하는 방식을 Tire 사례를 응용하여 살펴보겠습니다. 

 

 

public interface Tire {
	public void roll();
}

 

public class HankookTire implements Tire {
	@Override
	public void roll() {
		System.out.println("HankookTire rolls");
	}
}

 

public class KumhoTire implements Tire{
	@Override
	public void roll() {
		System.out.println("KumhoTire rolls");
	}
}

 

[다형성 적용]

public class Car {
	Tire frontLeftTire = new HankookTire();
	Tire frontRightTire = new HankookTire();
	Tire backLeftTire = new HankookTire();
	Tire backRightTire = new HankookTire();
	
	void run() {
		frontLeftTire.roll();
		frontRightTire.roll();
		backLeftTire.roll();
		backRightTire.roll();
		
		System.out.println("-------");
	}
}

 

[실행]

public class ExampleMain {	
	public static void main(String[] args) {
		Car myCar = new Car();
		myCar.run();
		
		myCar.frontLeftTire = new KumhoTire();
		myCar.frontRightTire = new KumhoTire();
		
		myCar.run();
	}
}

/* 출력
HankookTire rolls
HankookTire rolls
HankookTire rolls
HankookTire rolls
-------
KumhoTire rolls
KumhoTire rolls
HankookTire rolls
HankookTire rolls
-------
*/