대망의 상속
상속은 기존에 존재하는 클래스로부터 필드와 메소드를 이어받고, 필요한 기능을 추가할 수 있는 기법이다. 상속하는 클래스를 부모 클래스, 자식 클래스를 서브 클래스라고 한다.
class ElectricCar extends Car {
blahblah
}
=> ElectricCar 자식 클래스 또는 서브 클래스 / Car 부모 클래스 또는 슈퍼 클래스
예를 들어, 전기 자동차는 일반적인 자동차의 특징을 가지고 있고, 추가로 배터리를 가지고 있다고 하자. 이런 경우에는 전기 자동차 클래스를 다시 작성하는 것보다는, 일반적인 자동차를 나타내는 클래스인 Car class를 상속 받아서 ElectricCar 클래스를 작성하는 것이 쉽다.
class Car{
int speed;
public void setSpeed(int speed){
this.speed = speed;
}
}
class ElectricCar extends Car {
int battery; //추가된 필드(변수)
public void charge(int amount){
battery += amount;
} //추가된 메소드
}
자식 클래스는 부모 클래스가 가지고 있는 멤버들을 전부 상속받고 자신이 필요한 멤버를 추가하기 때문에 항상 자식 클래스가 부모 클래스를 포함하게 된다. 다음 그림에서 ElectricCar 클래스는 Car 클래스의 모든 필드와 메소드를 상속받고 여기에 하나의 필드와 하나의 메소드를 추가하였다.
ElectricCar 클래스의 객체를 생성하여 상속받은 필드와 메소드를 사용해보자.
public class ElectricCarTest{
main{
1.Electric Car obj = new ElectricCar();
2. obj.speed = 10;
3. obj.setspeed(60);
4. obj.charge(10);
}
}
자식 클래스는 부모 클래스의 필드와 메소드를 마치 자기 것처럼 사용할 수 있다. 예를 들어 obj는 부모 클래스의 필드인 speed, 메소드 setSpeed()를 마음대로 사용하고 있음. 자식 클래스의 자체 메소드 charge()를 사용할 수 있는 건 물론.
간단하고 강력하다. 새로운 클래스를 생성해야한다고 가정하자. 만약 우리가 원하는 코드를 가진 클래스가 이미 존재한다면, 이 클래스를 상속 받아서 새로운 클래스를 정의할 수 있다. 이렇게 함으로써 직접 작성할 필요 없이 이미 존재하는 클래스의 필드와 메소드를 재사용할 수 있다.
중복되는 코드를 줄일 수 있다.