본문 바로가기
Studynote/Computer Science 12

[14.09.16.Tue]시스템프로그래밍::다형성

by e.sunie 2018. 11. 5.

다형성 

: 여러 가지 형태를 가질 수 있는 능력

단, 연결이 되어있는 경우에만 사용가능 ~ 연결 = 상속



조상타입의 참조 변수로 자손타입의 인스턴스 참조 가능

(역은 성립불가)



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( )에서 호출되어 사용된다.


댓글