public class Vehicle {
private int curX, curY;
public void reportPosition() {
System.out.printf("차종: %s: 현재위치: (%d, %d)", this.getClass().getSimpleName(), curX, this.curY);
}
public void addFuel() {
System.out.println("어떻게든 연료는 필요!");
}
}
// TODO: Vehicle을 상속받는 구조로 변경해보자.
public class ElectricCar extends Vehicle{
@Override
public void addFuel() {
System.out.printf("차종: %s: 연료 주입: %s%n", this.getClass().getSimpleName(), "충전");
}
}
// TODO: Vehicle을 상속받는 구조로 변경해보자.
public class DieselSUV extends Vehicle{
@Override
public void addFuel() {
System.out.printf("차종: %s: 연료 주입: %s%n", this.getClass().getSimpleName(), "경유");
}
}
DieselSUV
, ElectricCar
는 모두 연료가 필요하므로 addFuel
은 공통 모듈
Vehicle
에 정리하고 각 자손 클래스에서 Override
예정Vehicle
에서 힘들게게 구현했지만 아무도 Vehicle
의 addFuel()
메서드에 신경쓰지 않음;
로 대체abstract
키워드를 메서드 선언부에 추가abstract
추가abstract class
는 상속 전용 클래스
자식은 abstract method
를 재정의할 책임
클래스에 구현부가 없는 메서드가 있으므로 객체를 생성할 수 없음
하지만 상위 클래스 타입으로써 자식을 참조는 가능
// Vehicle v = new Vehicle(); // abstract는 객체 생성 불가능
Vehicle v = new DieselSUV();
조상 클래스에서 상속받은 abstract
메서드를 제정의하지 않은 경우
abstract
메서드가 있는 상황이므로 자식 클래스는 abstract
클래스로 선언되어야 함