다형성(polymorphism)

정순동·2023년 12월 6일
0

자바기초

목록 보기
33/89

다형성

다형성이란? '여러 가지 형태를 가질 수 있는 능력'을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현했다.
조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다.

	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 t = new Tv()
    SmartTv s = new SmartTv()

하지만 이때 서로 상속관계에 있는 클래스라면 아래와 같이 작성이 가능하다.

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

이 때는 SmartTv의 text변수와 caption()메서드는 사용이 불가능하나 원래 Tv에 정의돼있던 power와 channel및 메서드등은 사용할 수 있다.

반대로 자식 클래스타입의 참조변수에는 부모 클래스타입의 인스턴스를 참조를 허용할까?
불허한다. 자식 클래스타입의 참조변수가 사용할 수 있는 멤버 개수가 부모보다 많기에 막아놨다.

	SmartTv s = new Tv(); //XXX 안됨!

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

0개의 댓글