
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
강의 3-18 에서 인터페이스의 다형성 부분에서 예제 코드 설명하는 부분이 이해가 잘 안됩니다
코드가 길어서 메인클래스에 이해안되는 부분만 올려 보겠습니다!
MultiRemoteController samsung = mrc.getTV(new SamsungTv("Samsung"));//1번
samsung.turnOnOff();//2번
SamsungTv samsungTv = (SamsungTv) samsung;//3번
samsungTv.turnOnOff();
1번: 아래와 같이 이해하였습니다.
우변: MultiRemoteController의 getTV는 인풋이 Tv tv인데 여기서는 new SamsungTv("Samsung")를 넣었음. 즉, 자동형변환(Tv tv = new SamsungTv("Samsung")) 한 것.
좌변: samsung이 우변에서 리턴된 SamsungTv에서 MultiRemoteController로 자동형변환 되었다.
2번: MultiRemoteController가 된 samsung으로 삼성티비를 켰습니다.
3번: 2번에서 킬 때 samsung을 MultiRemoteController로 형변환을 해서 켰으니까, 끌때도 그대로 MultiRemoteController로 끄면되는 것 아닌가요? 왜 MultiRemoteController이던 samsung을 SamsungTv로 강제형변환 하여 끄는건지 모르겠습니다..!
public class Main {
public static void main(String[] args) {
// LG TV 구현체를 조작
MultiRemoteController mrc = new LgTv("LG");
mrc.turnOnOff();
mrc.volumeUp();
mrc.channelDown();
mrc.channelUp();
mrc.turnOnOff();
// 조작 대상을 Samsung TV로 교체
System.out.println("\n<Samsung TV로 교체>");
mrc = new SamsungTv("Samsung");
mrc.turnOnOff();
mrc.channelUp();
mrc.volumeDown();
mrc.volumeUp();
mrc.turnOnOff();
// 매개변수, 반환타입 다형성 체크
System.out.println("\n<매개변수, 반환타입 다형성 체크>");
MultiRemoteController samsung = mrc.getTV(new SamsungTv("Samsung"));
samsung.turnOnOff();
SamsungTv samsungTv = (SamsungTv) samsung;
samsungTv.turnOnOff();
System.out.println();
MultiRemoteController lg = mrc.getTV(new LgTv("LG"));
lg.turnOnOff();
LgTv lgTv = (LgTv) lg;
lgTv.turnOnOff();
}
}
