상위 타입 계약으로 여러 구현을 다룹니다.
extends로 상속하고 override로 동작을 재정의합니다. 상위 타입 변수는 여러 하위 객체를 가리킬 수 있으며 실제 객체의 메서드가 실행됩니다.
변수 content의 선언 타입은 Content지만 실제로 가리키는 객체는 VideoCourse라서, describe() 호출은 실행 시점에 VideoCourse의 구현으로 연결되어 영상 45분을 출력합니다. Content는 abstract라 new로 직접 만들 수 없고, 추상이 아닌 하위 클래스는 describe를 반드시 구현해야 컴파일됩니다. @Override는 이름이나 매개변수를 잘못 적어 재정의가 되지 않은 실수를 컴파일 오류로 알려 줍니다.
super는 상위 생성자나 구현을 호출합니다. 하위 타입은 상위 타입의 기대를 깨지 않도록 같은 계약을 지켜야 합니다.
코드 재사용만을 위한 깊은 상속보다 구성과 작은 인터페이스를 우선 검토합니다.
필드와 static 메서드는 인스턴스 메서드처럼 다형적으로 override되지 않습니다.
직접 바꿔보세요QuizCourse 구현을 추가하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.