package ch03;
public abstract class Car {
public void startCar() {
System.out.println("시동을 켭니다.");
}
public void turnoff() {
System.out.println("시동을 끕니다");
}
//추상메서드
public abstract void wiper();
public abstract void drive();
public abstract void stop();
//실무*
//후크(hook) 메서드
//필요하면 사용하는 클래스에서 직접 구현해서 사용하라.
public void washCar() {
}//안에 아무것도 담지않는 것 일반메서드
//메뉴얼카에만 필요해서 메뉴얼카에만 적용이 가능하게끔 함
//핵심 !!
//템플릿 메서드 패턴 (프레임 워크: 실행의 순서를 나타나고 그틀안에 정보를 담는다.)
//메서드 앞에 final 하위클래스에서 재정의를 할 수 없다. (오버라이드x)
final public void run() {
//메서드에 순서(템플릿을 지정할 수 있다.)
startCar();
drive();
wiper();
stop();
turnoff();
washCar();
//이순서를 지켜야 Car Class의 동작이 원활하다.
//다른 클래스에서 run에 public써서 다시 재정의가 될수없다.
}
}
package ch03;
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() {
System.out.println("스스로 wiper동작을 합니다.");
}
@Override
public void washCar() {
System.out.println("스스로 세차를 합니다.");
}
}
package ch03;
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() {
System.out.println("사람이 wiper기능을 켭니다.");
}
}
package ch03;
public class MainTest1 {
public static void main(String[] args) {
Car aicar = new AiCar();
aicar.run();
System.out.println("-----");
Car manualCar = new ManualCar();
manualCar.run();
}
}
'Java > Excercise' 카테고리의 다른 글
interface ch01 HomeAppliances (0) | 2021.08.31 |
---|---|
inheritance ch02 상속이 되지않는 Car (0) | 2021.08.30 |
abstract ch02 Computer (0) | 2021.08.30 |
abstract ch01 Animal (0) | 2021.08.30 |
inheritance ch04 FruitTest (0) | 2021.08.27 |