본문 바로가기

Java의 정석

다형성(polymorphism)

다형성이란 여러 가지 형태를 가질 수 있는 능력을 의미하며 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다.

public class PolymorphismExam {
    public static void main(String[] args) {
        Tv t = new Tv();
        SmartTv s = new SmartTv();
    }
}

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와 SmartTv클래스가 서로 상속관계에 있을 경우, 다음과 같이 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하도록 하는 것도 가능하다.

Tv t2 = new SmartTv(); // 조상 타입 참조변수로 자손 타입 인스턴스 참조

차이점

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

실제 인스턴스가 SmartTv타입이라 할지라도 참조변수 t로는 SmartTv인스턴스의 모든 멤버를 사용할 수 없다.

즉 t.text와 t.caption()은 참조변수 t로 사용이 불가능하다.

'Java의 정석' 카테고리의 다른 글

instanceof 연산자  (0) 2022.04.11
참조변수의 형변환  (0) 2022.04.08
접근 제어자(access modifier)  (0) 2022.04.06
제어자(modifier)  (0) 2022.04.05
import  (0) 2022.04.04