상속과 기능 추가.
이번에는 상속 관계의 장점을 알아보기 위해, 상속 관계에 다음 기능을 추가해보겠습니다.
- 모든 차량에 문열기(
openDoor()
) 기능을 추가합니다. - 새로운 수소차(
HydrogenCar
)를 추가합니다.- 수소차는
fillHydrogen()
기능을 통해 수소를 충전할 수 있습니다.
- 수소차는
package ex3 - Car
package extends1.ex3;
public class Car {
public void move() {
System.out.println("차를 이동합니다.");
}
// 추가
public void openDoor() {
System.out.println("문을 엽니다.");
}
}
- 모든 차량에 문열기 기능을 추가할 때는 상위 부모인
Car
에openDoor()
기능을 추가하면 됩니다.- 이렇게 하면
Car
의 자식들은 해당 기능을 모두 물려받게 됩니다.- 만약 상속 관계가 아니었다면 각각의 차량에 해당 기능을 모두 추가해야 합니다.
- 이렇게 하면
package ex3 - ElectricCar
package extends1.ex3;
public class ElectricCar extends Car {
public void charge() {
System.out.println("충전합니다.");
}
}
- 기존 코드와 같습니다.
package ex3 - GasCar
package extends1.ex3;
public class GasCar extends Car {
public void fillUp() {
System.out.println("기름을 주유합니다.");
}
}
- 기존 코드와 같습니다.
package ex3 - HydrogenCar
package extends1.ex3;
public class HydrogenCar extends Car {
public void fillHydrogen() {
System.out.println("수소를 충전합니다.");
}
}
- 수소차를 추가했습니다.
-
Car
를 상속받은 덕분에move()
,openDoor()
와 같은 기능을 바로 사용할 수 있습니다. - 수소차는 전용 기능인 수소 충전(
fillHydrogen()
) 기능을 제공합니다.
package ex3 - CarMain
package extends1.ex3;
public class CarMain {
public static void main(String[] args) {
ElectricCar electricCar = new ElectricCar();
electricCar.move();
electricCar.charge();
electricCar.openDoor();
GasCar gasCar = new GasCar();
gasCar.move();
gasCar.fillUp();
gasCar.openDoor();
HydrogenCar hydrogenCar = new HydrogenCar();
hydrogenCar.move();
hydrogenCar.fillHydrogen();
hydrogenCar.openDoor();
}
}
실행 결과
차를 이동합니다.
충전합니다.
문을 엽니다.
차를 이동합니다.
기름을 주유합니다.
문을 엽니다.
차를 이동합니다.
수소를 충전합니다.
문을 엽니다.
기능 추가와 클래스 확장
- 상속 관계 덕분에 중복은 줄어들고, 새로운 수소차를 편리하게 확장(extend)한 것을 알 수 있습니다.