다형성이란?
>> 조상 타입 참조변수로 자소나입 객체를 다루는것
객체를 생성할때 참조변수와 생성자의 타입을 동일하게 생성했었는데
Tv t = new Tv();
SmartTv s = new SmartTv();
다형성이란 객체간 상속 관계가 형성되어 있을때 조상타입의 참조변수 t로
자손 타입의 객체 SmartTv()를 다루는 것이다.
Tv t = new SmartTv(); (불일치 해도 OK)
<< 조상 타입의 멤버는 자식보다 작거나 같다. >>
SmartTv s = new SmartTv(); 로 생성할 경우에는
Tv의 멤버 4개와 SmartTv 멤버 2개 총 6개의 멤버를 모두 사용할 수 있다.
Tv t = new SmartTv(); 로 생성할 경우는
Tv에는 멤버가 4개 밖에 없기 때문에 SmartTv가 6개를 가지고 있더래도 Tv에는 SmartTv에만 있는 것을
사용할 수 없기 때문에 4개 밖에 사용할 수 없다.
하지만 반대로 자손타입의 참조변수로 조상타입의 객체를 가리킬수 없다.
SmartTv s = new Tv(); -----------> 허용되지 않는다.
실제 가지고 있는 멤버 갯수 보다(인스턴스TV()[5]) 참조변수의 멤버 갯수가 크면 안된다.(s[7])
즉 참조변수의 기능이 더 큰데 인스턴스가 작게 만들수 없다 --> SmartTv s = new Tv()가 안된다는 말
****** 참조변수가 더많은 멤버를 가지고있는 객체의 주소를 참조 하더래도 참조변수에있는 것만 사용가능하다.
왜냐하면 참조변수의 리모콘에는 해당기능을 사용할 수 있는 버튼이 없다. ******
참조변수의 형변환
>> 참조변수간의 형변환은 사용할 수 있는 멤버의 갯수를 조절하는 것으로..
>> 조상 자손 관계의 참조변수는 서로 형변환 가능.
다형성에서 봤던 것처럼
Tv t = new Tv();
SmartTv s = new SmartTv();
t = s; SmartTv 객체의 주소를 t에 넣어주게 되면, t에서는 모든 기능을 사용하는게 아니라 t에 있는
멤버변수만 사용할 수 있다. 위에 사진을 예로들자면
CaptionTv의 모든 멤버를 Tv가 사용하지 못하고 Tv에 있는 5개만 사용할 수 있었다.
SmartTv ss;
ss = (SmartTv)t; 결국 s의 주소인 X100이 ss에 넣어지게 되고 ss의 경우는 모든 멤버(기능)을 사용할 수 있다.1
조상타입이 -> 자손타입으로 형변환시 형변환 생략이 불가능하다.
c = (Cars)f; 시에
Cars 로는 FireCar의 fullFuel() 기능과 onOff, input을 사용하지 못했다.
하지만
ff = (FireCar)c; 는 c에는 FireCar 의 f의 주소를 가지고 있기 때문에
ff는 모든 기능을 사용할 수 있다. ff는 FireCar의 참조변수이므로
즉 리모컨(참조변수) 가 가리키고 있는 실제 객체의 주소의 멤버(인스턴스의 멤버수)보다 리모컨(참조변수의 멤버수)이 가지고 있는 멤버의 갯수가 크면안된다.
'dev > JAVA' 카테고리의 다른 글
[JAVA] 인터페이스 (0) | 2022.05.31 |
---|---|
[JAVA] 매개변수의 다형성 (0) | 2022.05.30 |
[JAVA] 매개변수(Parameter) , 인수(argument) (0) | 2022.05.30 |
[JAVA] 클래스 (0) | 2022.05.30 |
[JAVA] 변수 (0) | 2022.05.30 |