꾸준한 스터디

부모클래스 메서드를 자식클래스에서 오버라이딩 시 메서드 시그니쳐에 이름, 매개변수, 반환타입이 같아야 하는데

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();
	}
	
}
profile

꾸준한 스터디

@StudyRecord

포스팅이 유익하셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!