- 자바 프로그래밍에서 '상속'을 설명할 때 주로 재활용, 재사용이라는 말을 많이 한다. 재사용은 객체 지향적인 프로그래밍에서 얻을 수 있는 큰 이점 중 하나인데 상속은 어떤 기존의 클래스의 특징을 그대로 재사용하여 다른 클래스를 만들 수 있게 해주는 기법으로써 코드를 재사용할 수 있는 기법이다.
- 상속의 구현은 만약 Bullet이라는 클래스가 있고 이 Bullet의 특성을 물려받는 다른 종류의 Bullet, 예를들어 LightBullet 클래스를 만든다고 하면
class LightBullet extends Bullet{
//...
}
과 같이 자식클래스 명 옆에 'extends 조상클래스명'을 써주는 것으로 가능하다.
이때, 두 클래스는 상속관계에 있으며
Bullet 클래스는 상속을 해주는 클래스이며, 조상 클래스, 부모 클래스, 상위 클래스 등과 같이 부르고
LightBullet 클래스는 상속을 받는 클래스이며, 자손 클래스, 자식 클래스, 하위 클래스 등과 같이 부른다.
- 다음은 총을 쏘는 Gun 클래스, 총알인 Bullet 클래스, Bullet 클래스를 상속받은 다른 종류의 총알인 BombBullet 클래스, LightBullet클래스로 구성된 예제이다.
package BulletEx;
public class Gun {
private Bullet[] bullets; //총알이 담길 Bullets배열 생성.
private int index;
public Gun(Bullet[] bullets) {
super();
this.bullets = bullets;
}
public Bullet fire() {
return bullets[index++];
}
public static void main(String[] args) {
Bullet[] arr = new Bullet[20];
for (int i = 0; i < arr.length; i++) {
if (i % 5 == 0) {
arr[i] = new LightBullet();
continue;
}
if (i % 6 == 0) {
arr[i] = new BombBullet();
continue;
}
arr[i] = new Bullet();
}
Gun gun = new Gun(arr);
for (int i = 0; i < 20; i++) {
Bullet bullet = gun.fire();
bullet.effect();
}
}
}
package BulletEx;
class Bullet {
public void effect() {
System.out.println("탕탕탕");
}
}
package BulletEx;
public class LightBullet extends Bullet {
@Override
public void effect() {
System.out.println("------------------------");
super.effect(); // bullet에 있는 effect를 한 번 호출해주고 내려온다 super 은 상속받은 곳 안에서만
// 쓸 수 있음
System.out.println("번쩍번쩍");
System.out.println("------------------------");
}
}
package BulletEx;
public class BombBullet extends Bullet {
@Override
public void effect() {
// TODO Auto-generated method stub
System.out.println("------------------------");
super.effect();
System.out.println("펑펑펑");
System.out.println("------------------------");
}
}