[JAVA] 다형성(polymorphism)

unoung·2022년 5월 22일
1

JAVA

목록 보기
1/6

다형성이란?

다형성이란 '여러가지 형태를 가질 수 있는 능력' 을 말한다.
조상타입 참조변수로 자손타입 객체를 다룰 수 있다.

🖥 코드 작성해보기

class Tv{
    boolean power;  //전원상태(on/off)
    int channel;   //채널
        
    void power(){
    	power = !power;
    }
        
 	void channelUp(){
     	++channel;
	}
        
	void channelDown(){
     	--channel;
   	}      
}

class SmartTv extends Tv{
	String text;	//캡션을 보여주기 위한 문자열
    void caption(){/*내용생략*/}

}
Tv t = new SmartTv();
// 타입 불일치, 조상 타입의 참조변수로 자손 인스턴스를 참조함

🤔 그렇다면?
인스턴스를 같은 타입의 참조변수로 참조하는 것과
조상타입의 참조변수로 참조하는 것은 어떤 차이가 있을까?

SmartTv s= new SmartTv(); //참조 변수와 인스턴스 타입이 일치
Tv t = new SmartTv();	// 조상타입 참조변수로 자손타입 인스턴스 참조
> Tv클래스에 정의되지 않은 멤버,t.text와 t.caption()은 사용불가

둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용 할 수 있는 멤버의 개수가 달라진다.

💁🏻‍♀️반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조하는 것은 가능할까?

SmartTv s = new Tv(); // 에러. 허용 안됨!
>실제 인스턴스인 Tv의 멤버 개수보다 참조변수 s가 사용할 수 있는 멤버 개수가 더 많기 때문

핵심

조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조는 불가능!



출처: 자바의 정석(도서,유튜브)

profile
복습 블로그

0개의 댓글