상속(inheritance)
상속이란 자신이 부모로 부터 무언가를 물려받는 것이다.
클래스 간의 상속은 부모클래스의 정의되어 있는 속성과 메서드를 물려받는다.
상속을 하지 않고 불을 끄고(extinguish), 사이렌(siren)을 울리는 행동을 하는 소방차 클래스를 정의하면 다음과 같다.
public class FireCar {
//맴버 변수
int yearModel;
String modelName;
int speed;
boolean reverse;
//생성자
public Car(int yearModel, String modelName) {
this.yearModel = yearModel;
this.modelName = modelName;
}
//메서드
public void accelerateSpeed() {
this.speed += 5;
System.out.println("부우웅~~~ (가속) 현재속도 : " + this.speed + "km/h");
}
public void breakSpeed() {
System.out.println("끼이익~~~ (감속) 현재속도 : " + this.speed + "km/h");
this.speed -= 5;
}
public void horn() {
System.out.println("삐익~~~");
}
public int getSpeed() {
return this.speed;
}
//불끄기 행동 추가
public void extinguish() {
System.out.println("물을 뿜뿜");
}
//싸이렌 행동 추가
public void siren() {
System.out.println("비켜주세요. 위급상황입니다. 웨엥~~ 웨엥~~ 웨엥~~");
}
}
위의 코드를 살펴 보면 소방차(FireCar)는 차(Car)가 가진 기능을 그대로 수행하면서 추가로 불을 끄고(extinguish), 싸이렌(siren)을 울리는 기능만 추가되어 있다. 따라서 Car 클래스를 상속받아 FireCar 를 구현하면 다음과 같이 만들 수 있다.
public class FireCar extends Car {
//불끄기 행동 추가
public void extinguish() {
System.out.println("물을 뿜뿜");
}
//싸이렌 행동 추가
public void siren() {
System.out.println("비켜주세요. 위급상황입니다. 윙~~ 윙~~ 윙~~");
}
}
FireCar 클래스는 Car를 상속받았다. FireCar 는 Car의 하위 개념이라고 할 수 있으며, "FireCar is a Car" 와 같이 말할 수 있다.
따라서 상속관계는 IS-A 관계 일때 사용할 수 있다.
메서드 오버라이딩(Method overriding)
FireCar의 경우 위급상황에서 다른 Car 와 다르게 경적소리를 더 웅장하게 만들고 싶을 수 있다. 이런 경우 부모속성인 Car의 horn 메서드의 기능을 재정의 할 수 있는데 이를 메서드 오버라이딩이라고 한다.
public class FireCar extends Car {
//메서드 오버라이딩, 경적을 울리는 행동 재정의
public void horn() {
System.out.println("뿌와앙~~~~");
}
//불끄기 행동 추가
public void extinguish() {
System.out.println("물을 뿜뿜");
}
//싸이렌 행동 추가
public void siren() {
System.out.println("비켜주세요. 위급상황입니다. 윙~~ 윙~~ 윙~~");
}
}
상속을 사용시 이점
//Cruise