728x90
목차
Q1
클래스를 구현할 때 메서드 몸체를 구현하지 않고 선언만 하는 메서드를 [ ]라고 하고, 이를 포함한 클래스를 [ ]라고 한다.
Q2
상수를 선언할 때 상속받은 클래스에서 메서드를 재정의하지 못하도록 사용하는 예약어는 [ ]이다.
Q3
추상 클래스나 추상 메서드를 선언할 때 사용하는 예약어는 [ ]이다.
Q4
로직 흐름을 정의한 메서드이며 메서드 내부에서 일반 메서드나 구현되지 않은 추상 메서드를 호출. 흐름이 변하지 않도록 하위 클래스에서 재정의하지 못하게 final로 선언하는 메서드를 [ ]라고 한다.
Q5
Car 추상 클래스를 상속받는 Sonata, Avante, Gradeur, Genesis 클래스가 있다. 각 차는 주행하기 위해 다음 순서로 움직인다.
run(){
strat();
drive();
stop();
turnoff();
}
run()메서드는 템플릿 메서드로 구현하고 다음 출력 결과가 나오도록 Car, Sonata, Avante, Gradeur, Genesis 클래스를 구현하라.
package practice;
import java.util.ArrayList;
public class CarTest {
public static void mArrayList<E>g[] 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();
System.out.println("==============");
}
}
}
Q6
Q5에서 구현한 차는 모두 공통으로 washCar()메서드를 호출할 수 있다. 차를 주행한 후 세차를 하도록 메서드를 추가하여 프로그램을 구현해보자.
정답:
Q1: 추상 메서드, 추상 클래스
Q2: final 예약어
Q3: abstract
Q4: 템플릿 메서드
Q5:
Car 클래스
package practice;
public abstract class Car {
public abstract void start();
public abstract void drive();
public abstract void stop();
public abstract void turnoff();
public void run() {
start();
drive();
stop();
turnoff();
}
}
Sonata 등 하위 클래스
package practice;
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 시동을 끕니다.");
}
}
Q6:
Car 클래스
package practice;
public abstract class Car {
public abstract void start();
public abstract void drive();
public abstract void stop();
public abstract void turnoff();
public void run() {
start();
drive();
stop();
turnoff();
washCar();
}
public void washCar() {
System.out.println("세차를 합니다.");
}
}
[Do it! 자바 프로그래밍 입문] 도서로 공부하며 정리한 글입니다.
300x250