1. 다형성을 사용하면 레퍼런스 유형을 실제 객체 유형의
상위 클래스 유형으로 지정할 수 있습니다.
- 레퍼런스 변수를 선언할 때 레퍼런스 변수를 선언한 유형에 대해
'A는 B다.' 테스트를 통과하는 모든 객체를 그 레퍼런스에 대입할 수 있습니다.
Animal [] animals = new Animal[5];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Wolf();
animals[3] = new Hippo();
animals[4] = new Lion();
for(int i=0; i<animals.length; i++){
animals[i].eat();
animals[i].roam();
}
2. 인자와 리턴 유형에 대해서도 다형성을 적용할 수 있습니다.
class Vet{
public void giveShot(Animal a){
a.makeNoise();
}
}
- 다형적인 인자를 사용하는 코드를 만들면,
즉, 메소드 매개변수를 상위클래스 유형으로 선언하면
실행할 때 어떤 하위 클래스의 객체도 전달할 수 있다.
3. Q&A
질문: 클래스의 하위클래스를 만들어내지 못하는 경우.
답변: 세가지 경우가 있습니다.
첫째. 접근 제어와 관련된 것입니다.
클래스를 public이 아닌 것으로 만들 수 있습니다.
public이 아닌 클래스의 하위클래스는
그 클래스와 같은 패키지 안에서만 만들 수 있습니다.
둘째. final 키워드 변경자로 클래스의 하위 클래스를
만들 수 없게 한 경우입니다.
클래스를 final로 지정하면 그 클래스는 상속 계층에서
맨 아래에 있는 클래스가 됩니다.
세째. 클래스의 생성자가 모두 private로 지정된 경우입니다.