다형성(polymorphism)

essential·2023년 7월 23일

객체 지향

목록 보기
26/40

다형성

  • 여러 가지 형태를 가질 수 있는 능력
  • 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
class Tv {
	boolean power;
	int channel;
	void power() {}
	void channelUp() {}
	void channelDown() {}
}

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

Tv t = new SmartTv(); // 타입 불일치해도 사용 가능 (조상/자손)

객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때의 차이점

SmartTv s = new SmartTv(); // 참조 변수와 인스턴스의 타입이 일치

  • 매개 변수 s 로 smartTv 인스턴스 7개 사용 가능

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

  • 매개 변수 s 로 smartTv 인스턴스 5개 사용 가능 (tv 클래스의 멤버만 사용 가능 (실제 멤버가 7개지만)

  • 자손 타입의 참조 변수로 조상 타입의 객체를 가리킬 수 없다

Tv t = new SmartTv(); // OK. 허용

SmartTv s = new Tv(); // 에러. 허용 안됨 (자손이 조상 불가능)

없는 버튼을 누르니까 에러 (없는 것을 호출하니까)


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

A. 아닙니다. 일치하는 것이 보통이지만 일치 하지 않을 수도 있습니다.

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

A. 참조변수로 사용할 수 있는 멤버의 개수가 달라집니다.

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

A. 아니요. 허용되지 않습니다.

profile
essential

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

글 잘 봤습니다.

답글 달기