자바(Java)

자바 다형성(polymorphism) 예시 참조변수 인스턴스

JAVABOZA 2023. 6. 8. 20:12

다형성이란?

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

 

조상클래스의 타입의 참조변수자손클래스의 인터스턴스를 참조할 수 있도록!

 

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

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

Tv 클래스와 SmartTv는 서로 상속관계로 있으므로, 아래와 같은 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조 가능

 

Tv t = new SmartTv();

 

다시 한버 정리해보면 아래와 같은 코드를 이해할 수 있다.

- 아래의 코드는 SmartTv인스턴 스를 2개 생성하고, 참조변수 t 와 s 가 생성된 인스턴스(SmartTv)를 하나씩 참조

 

SmartTv s = new SmartTv();      // 참조변수와 인스턴스의 타입 일치
Tv t = new SmartTv();           // 조상타입 참조변수로 자손타입 인스턴스 참조

 

하지만 인스턴스가 SmartTv타입이라도, 

참조변수 t는 SmartTv인스턴스의 모든 멤버를 사용 할 수가 없다.

(왜? Tv클래스에는 기능이 없으니까)

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

SmartTv s = new Tv(); 는 에러!!!!

실제 인스턴스의 Tv의 멤버 개수보다 참조변수 s의 멤버개수가 더 많기 때문!