Car 추상 클래스를 상속받는 Sonata, Avate, Gradeur, Genesis 클래스가 있습니다. 각 차는 주행하기 위해 다음 메서드의 순서로 움직입니다.
run(){
start();
drive();
stop();
turnoff();
}
run() 메서드를 템플릿 메서드로 구현하고 CarTest 클래스를 ArrayList를 활용하여 다형성이 구현되게 작성하시오
public abstract class Car {
public abstract void start();
public abstract void drive();
public abstract void stop();
public abstract void turnoff();
final public void run() {
start();
drive();
stop();
turnoff();
System.out.println("=================");
}
}
Car 클래스를 작성하고 공통된 메서드인 start(),drive(),stop(),turnoff();를 추상메서드로 구현하고 클래에도 abstract를 선언해줍니다.
run()메서드를 Car 클래스의 메서드들의 기능하는 순서를 조직하는 템플릿 메서드로 작성합니다.
public class Sonata extends Car{
@Override
public void start() {
System.out.println("Sonata 시동을 켭니다");
}
@Override
public void drive() {
System.out.println("Sonata 달립니다");
}
@Override
public void stop() {
System.out.println("Sonata 멈춥니다.");
}
@Override
public void turnoff() {
System.out.println("Sonata 시동을끕니다.");
}
}
Sonata 클래스를 하부 클래스로 작성하고 추상 메서드들에 출력문을 작성합니다.
나머지 3개의 하부 클래스도 이름을 바꾸 똑같이 작성합니다.(생략)
import java.util.ArrayList;
public class CarTest {
public static void main(String[] args) {
ArrayList<Car> carList = new ArrayList<Car>();
carList.add(new Sonata());
carList.add(new Grandeur());
carList.add(new Avante());
carList.add(new Genesis());
for(Car car : carList) {
car.run();
}
}
}
CarTest 클래스를 작성하고 Car를 자료형으로 하는 ArryList를 만들어 add메소드를 통해 하부 클래스들을 new하여 배열에 담습니다.
향상된 for문을 사용하여 배열안에 모든 인스턴스들이 run()메서드를 사용하게 합니다.
//결과
Sonata 시동을 켭니다
Sonata 달립니다
Sonata 멈춥니다.
Sonata 시동을끕니다.
=================
Grandeur 시동을 켭니다
Grandeur 달립니다
Grandeur 멈춥니다.
Grandeur 시동을끕니다.
=================
Avante 시동을 켭니다
Avante 달립니다
Avante 멈춥니다.
Avante 시동을끕니다.
=================
Genesis 시동을 켭니다
Genesis 달립니다
Genesis 멈춥니다.
Genesis 시동을끕니다.
=================