하나의 코드가 여러 자료형으로 구현되어 실행되는 것
class Animal {
public void move() {
System.out.println("동물이 움직입니다.");
}
}
class Human extends Animal {
public void move() {
System.out.println("사람이 두 발로 걷습니다.");
}
}
class Tiger extends Animal {
public void move() {
System.out.println("호랑이가 네 발로 뜁니다.");
}
}
public class AnimalTest {
public static void main(String[] args) {
AnimalTest aTest = new AnimalTest();
aTest.moveAnimal(new Human());
aTest.moveAnimal(new Tiger());
}
public void moveAnimal(Animal animal) {
animal.move();
}
}
사람이 두 발로 걷습니다.
호랑이가 네 발로 뜁니다.
IS-A 관계 : 일반적인 개념과 구체적인 개념의 관계
ex) 사람
은 포유류
이다.
상속은 IS-A 관계에서 사용하는 것이 가장 효율적
HS-A 관계 : 한 클래스가 다른 클래스를 소유한 관계
ex) 모든 학생
은 전공과목
을 가지고 있다.
상위클래스로 변환 되었던 하위 클래스를 다시 원래 자료형으로 형 변환 하는 것
ex)
Animal hAnimal = new Human();
if(hAnimal instanceof Human) {
Human human = (Human)hAnimal;
}
hAnimal은 원래 Human형으로 생성 되었는데, Animal형으로 형변환됨
instanceof
예약어를 통해서 왼쪽에 있는 변수의 원래 인스턴스형이 오른쪽 클래스 자료형인가를 확인
그 후 Human human = (Human)hAnimal;
문장을 통해 명시적으로 형 변환
주의)
Animal ani = new Tiger();
Human h = (Human)ani;
Tiger
는 Human
과 상속 관계가 아니기 때문에