부모타입 변수 = 자식타입객체;
는 자동으로 부모타입으로 변환이 일어난다.
자식 객체는 부모 객체의 멤버를 상속받기 때문에 부모와 동일하게 취급될 수 있다.
: 예를 들어 포유류 클래스를 상속받은 고래 클래스가 있다면 포유류 고래 = 고래객체; 가 성립될 수 있음
: 고래 객체는 포유류의 특징인 모유수유 행위를 가지고 있기 때문
: 다만 주의할 점은 부모타입 변수로 자식객체의 멤버에 접근할 때는 부모 클래스에 선언된(상속받은) 멤버만 접근할 수 있음
Mammal : 부모 클래스
class Mammal {
// 포유류는 새끼를 낳고 모유수유를 한다.
public void feeding(){
System.outprintln("모유수유를 합니다.");
}
}
class Whale extends Mammal {
// 고래는 포유류 이면서 바다에 살며 수영이 가능하다
public void swimming(){
System.out.println("수영하다.");
}
@Override
public void feeding() {
System.out.println("고래는 모유수유를 합니다.");
}
}
public class Main {
public static void main(String[] args) {
// 고래는 포유류이기 때문에 포유류 타입으로 반환될 수 있습니다.
Mammal mammal = new Whale();
// 하지만 포유류 전부가 바다에 살고 수영을 할 수 있는 것은 아니기 때문에
// 수영하다 메서드는 실행 불가
// 즉 부모 클래스에 swimming이 선언되어있지 않아서 사용 불가능 합니다.
// mammalia.swimming(); // 오류발생
// 반대로 모든 포유류가 전부 고래처럼 수영이 가능한 것이 아니기 때문에 타입 변환이 불가능함
// 즉 부모 타입의 객체는 자식타입의 변수로 변환될 수 없다
// Whale = whale = new Mammal(); // 오류 발생
mammal.feeding();
}
}
자식타입 변수 = (자식타입) 부모타입객체;
// 자식타입 객체가 자동 타입변환된 부모타입의 변수
Mammal mammal = new Whale();
mammal.feeding();
// 자식객체 고래의 수영 기능을 사용하고 싶다면
// 다시 자식타입으로 강제 타입변환을 하면 된다
Whale whale = (whale) mammal;
whale.swimming();
여러 가지 형태를 가질 수 있는 능력을 의미함
Tire tire = new JankookTire("HANKOOK");
Tire tire = new KiaTire("KIA");
부모타이어 변수 = 자식타이어객체;
를 선언하여 자동 타입변환된 변수를 사용하여 자식타이어 객체에 재정의다형성 기능으로 인해 해당 클래스 객체의 원래 클래스명을 체크하는 것이 필요한데 이 때 사용할 수 있는 명령어가 intance of 이다.
(대상객체)
instance of
{클래스 이름}
과 같은 형태로 사용하면 응답값은 boolean이다.