Java/Excercise

abstract ch03 Car

낭구리 2021. 8. 30. 18:46
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