다형성
: 여러 가지 형태를 가질 수 있는 능력
단, 연결이 되어있는 경우에만 사용가능 ~ 연결 = 상속
조상타입의 참조 변수로 자손타입의 인스턴스 참조 가능
(역은 성립불가)
Tv t = new CaptionTv();
Tv의 맴버 개수 : 5개
CaptionTv의 맴버 개수 :7개
-> 다형성 사용가능 ~ Tv가 2개의 맴버를 못 쓰는 제약이 있을 뿐
CaptionTv c = new Tv();
사용불가
-> Why? CaptionTv란 타입이 Tv를 한정한다.
Tv는 무조건 7개의 맴버변수를 사용해야한다.
but Tv는 오직 5개만 사용가능 ~ 참조 불가!
참조변수의 형변환
변수의 종류
1. 기본형 변수 : 단일형 자료를 다루기에 값을 받음
2. 참조형 변수 : 복합형 자료를 다루기에 주소값을 받음 ~ 시작점을 알면 처리 가능하기에
다형성도 형변환에 속한다.
Tv t = new CaptionTv();
-> CaptionTv() 타입이 Tv타입으로 변환
# 헷갈림 주의 #
Down-casting의 경우, 상속관계가 전제일 때 성립가능
이래도 저래도 졸려dad
이 둘은 관계 없음 -> 성립 불가
Down-casting check!!
형변환은 되지만 사용권한은 없다
# Down-casting 비교 #
c=(CaptionTv) t;
-> 강제형변환은 가능 but 사용불가
fe2=(FireEngine)car;
-> car =fe; 가 성립하기에 사용가능
이미 up-casting이 되어 실질적인 내용이 만들어짐
if c=(CaptionTv)t도 사용가능하려면
t=c; 성립해야함
|
class Product { int price; Product(int pr){price=pr;}
} class Tv extends Product { Tv(){super(100);} public String toString(){return "Tv Purchased:";} } class Computer extends Product { Computer(){super(200);} public String toString(){return "Computer Purchased";} } class Audio extends Product { Audio(){super(150);} public String toString(){return "Audio Purchased";} } class Buyer { String name; int money; Buyer(String name, int money) { this.name=name; this.money=money; } void buy(Tv t){money=money-t.price;} void buy(Computer c){money-=c.price;} void buy(Audio a){money-=a.price;}
} class Pr07Ploy { public static void main(String[] args) { Tv tv1=new Tv(); Computer comp1=new Computer(); Audio audio1=new Audio(); Buyer b1=new Buyer("Chul-soo",1000); b1.buy(tv1); b1.buy(comp1); System.out.println(b1.name+":Money left="+b1.money ); } }
|
super : 조상의 생성자 호출함수
this : 자신의 생성자 호출함수
toString() : 특수 함수
~ 암시적으로 Syste.out.println( )에서 호출되어 사용된다.
'Studynote > Computer Science 12' 카테고리의 다른 글
09-23-Tue 6장 다형성~. (0) | 2018.11.05 |
---|---|
09-22-Mon (0) | 2018.11.05 |
[14.09.15.Mon] 시스템프로그래밍 (0) | 2018.11.05 |
[정리]Java Chapter 13 AWT와 애플릿 (0) | 2018.11.05 |
[정리]Java Chapter 11 컬렉션 프레임윅과 유용한 클래스 (0) | 2018.11.05 |
댓글