자바의 정석 - 다형성 (중요)

Yohan·2024년 1월 21일
0

다형성 (polymorphism)

  • 여러 가지 형태를 가질 수 있는 능력
  • 조상 타입 참조변수로 자손 타입 객체를 다루는 것
class Tv {
	~~
}

class SmartTv extends Tv {
	String text;
}
Tv t = new Tv();
SmartTv s = new SmartTv();

Tv t = new SmartTv(); // 타입 불일치, 다형성 정의에 따라 가능 (조상 타입 참조변수로 자손 타입 객체 다룰 수 있음)

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

SmartTv s = new SmartTv(); // 참조변수와 인스턴스의 타입이 일치
Tv t = new SmartTv(); // 조상 타입의 참조변수로 자손타입 인스턴스 참조
  • SmartTv s = new SmartTv();의 경우 SmartTv 타입에 해당되는 (본인2, Tv타입 5) 총 7개의 멤버변수 사용 가능
  • Tv t = new SmartTv();의 경우 Tv 타입에 해당되는 5개의 멤버변수 사용가능

  • 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
Tv t = new SmartTv(); // 7개(SmartTV)의 멤버변수 중 5개(Tv) o
SmartTv t = new Tv(); // 5개(Tv)의 멤버변수 중 7개(SmartTv) x

  • Q. 참조변수의 타입은 인스턴스의 타입과 반드시 일치해야 하는지?
    -> X, 일치하지 않을 수도 있음
  • Q. 참조변수가 조상타입일 때와 자손타입일 때의 차이?
    -> 참조변수로 사용할 수 있는 멤버변수의 개수가 달라짐
  • Q. 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 있는지?
    -> X
profile
백엔드 개발자

0개의 댓글