부모클래스 메서드를 자식클래스에서 오버라이딩 시 메서드 시그니쳐에 이름, 매개변수, 반환타입이 같아야 하는데
java 1.5부터 is-a 관계인 경우 메서드 반환타입이 부모클래스의 자식클래스로 변경할 수 있다.
public class Test {
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
// Dog is a Animal 묵시적 형변환
Animal aniDog = new Dog();
System.out.println(animal.create().getClass()); // Animal
System.out.println(dog.create().getClass()); // Dog
System.out.println(aniDog.create().getClass()); // Dog
}
}
class Animal {
protected Animal create() {
return new Animal();
}
}
class Dog extends Animal {
// 메서드 오버라이딩 시 반환타입을 자식클래스로 변경 가능. 묵시적 형변환
@Override
protected Dog create() {
return new Dog();
}
}'Effective Java > 키워드' 카테고리의 다른 글
| 정적 유틸리티 클래스 (Static Utility Class) (0) | 2023.01.06 |
|---|---|
| 직렬화 역직렬화 (Siriallizable Desirializable) (0) | 2023.01.04 |
| 열거 타입 (Enum) (0) | 2023.01.04 |
| 싱글턴 (Singleton) (0) | 2023.01.04 |
| 불변 클래스 (Immutable Class) (0) | 2023.01.04 |