JAVA

[자바의 정석 기초편 chapter7] 다형성(polymorphism)

zoozoo2 2022. 12. 9. 02:23

다형성이란? 

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

-> 조상 타입 참조 변수로 자손 타입 객체를 다루는 것

 

class Tv{
	boolean power;
    int channel;
     
    void power(){
    	power =! power;
    }
    void channelUp(){
    	++channel;
    }
    void channelDown(){
    	--channel;
    }
}

class SmartTv extends Tv{ 
	String text;
    void caption(){}
}

Tv class는 조상 SmartTv class는 Tv class를 상속 받았고, 자손이 됨

 

우리가 지금까지 배운것은 인스턴스 타입과 일치하는 타입의 참조변수만을 사용함

Tv t = new Tv();
SmartTv s = new SmartTv();

이제 다형성을 배웠자나

Tv t = new SmartTv();

이렇게 타입이 불일치하지만 서로 상속관계에 있을 경우! 

조상 타입의 참조변수로 자손 인스턴스를 참조하는게 가능하단걸 알게된거야 추카추카~~!@!@@

SmartTv s = new Tv(); //이건 안됨~~

자손타입의 참조변수로 조상타입의 인스턴스 참조는 안된다!!!!!!!! 

으디 감히 자손이 부모를 조종하려고 ! (꼰대)

사실 안되는 이유는 자손 타임의 멤버 개수가 조상보다 많을 수 있어서 그럼

자손 타입에서 무언가 바꿨는데 그게 조상에 없으면 에러임~~

 

**Q&A**

Q) 참조변수 타입은 인스턴스  타입과 반드시 일치해야 하나요?

A) 놉. 일치하는 것이 보통이지만 일치하지 않을 수 있습니다.

 

Q) 참조변수가 조상타입일때와 자손타입일때의 차이는?

A) 참조변수로 사용할 수 있는 멤버의 갯수가 달라져요

 

Q)  자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있나요?

A)  놉.