public abstract class Car { public abstract void drive();// abstract 를 추가하면 하위 클래스에서도 추가해줘야한다. public abstract void stop(); public abstract void wiper(); public void startCar() { System.out.println("시동을 겁니다."); } public void turnOff() { System.out.println("시동을 끕니다."); } public void washCar() { // abstract없이 작성되면 하위 클래스에서 추가없어도 에러없음! // 새차기능은 필수 기능이 아니다! AiCar에서만 재정의!! } final public void run() { // final 하위클래스에서 재정의 할 수 없게 함 startCar(); drive(); stop(); wiper(); turnOff(); washCar(); } }
ManualCar
public class ManualCar extends Car { @Override public void drive() { System.out.println("사람이 운전합니다."); System.out.println("사람이 핸들을 조작합니다."); } @Override public void stop() { System.out.println("브레이크를 밟아서 정지합니다."); } @Override public void wiper() {} }
AiCar
public class AiCar extends Car { @Override public void drive() { System.out.println("자율주행 합니다."); System.out.println("자동차가 스스로 조향합니다."); } @Override public void stop() { System.out.println("스스로 정지합니다."); } @Override public void wiper() {} @Override public void washCar() { System.out.println("자동 세차 합니다."); } }
CarTest
public class CarTest { public static void main(String[] args) { Car aiCar = new AiCar(); aiCar.run(); System.out.println("....................................."); Car mcar = new ManualCar(); mcar.run(); } }
시동을 겁니다.
자율주행 합니다.
자동차가 스스로 조향합니다.
스스로 정지합니다.
시동을 끕니다.
자동 세차 합니다.
.....................................
시동을 겁니다.
사람이 운전합니다.
사람이 핸들을 조작합니다.
브레이크를 밟아서 정지합니다.
시동을 끕니다.