하나의 객체가 여러가지의 형태를 가질 수 있는 성질
한 타입의 참조변수를통해 여러타입의 객체를 참조할 수 있도록 만든 것
상위 클래스 타입의 참조변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것
class ManU {
void player() {
System.out.println("맨유 소속 선수");
}
}
class Antony extends ManU {
void player() {
System.out.println("나는 맨유 소속 선수 안토니 입니다");
}
}
class Rashford extends ManU {
void player() {
System.out.println("나는 맨유 소속 선수 래시포드 입니다");
}
}
public static void main(String[] args) {
ManU mu = new ManU();
Antony an = new Antony();
ManU rash = new Rashford();
mu.player();
an.player();
rash.player();
}
맨유 소속 선수
나는 맨유 소속 선수 안토니 입니다
나는 맨유 소속 선수 래시포드 입니다
rash의 참조변수 타입을 Rashford로 하지않고 상위 클래스인 ManU로 함으로써 참조변수 rash가 사용할 수 있는 멤버의 개수는 상위클래스 멤버의 개수가 됨
상위 클래스 타입으로 하위 클래스 타입의 객체는 참조할 수 있지만 반대는 불가능 하다.
(상위클래스에는 하위클래스에서 구현된 멤버가 없기때문이다)