🔟 상속 – 새로운 능력을 추가하자! 🦸‍♂️💥

🎬 상상해봐

너는 이미 드래곤 클래스를 만들었어.
그 드래곤이 날 수 있는 능력을 추가하고 싶다면?
너는 새로운 드래곤 클래스를 따로 만들어서 날 수 있는 능력을 추가할 수 있어.
하지만 그럴 필요 없지! 상속을 이용하면, 기존 클래스의 능력을 그대로 이어받을 수 있어!


🦸‍♂️ 1. 상속이란?

상속부모 클래스의 속성기능자식 클래스가 물려받는 기술이야.
즉, 자식 클래스는 부모 클래스의 모든 것을 그대로 가져오면서 자신만의 특별한 능력을 추가할 수 있어.

public class Dragon {

    String name;
    int hp;

    public Dragon(String name, int hp) {
        this.name = name;
        this.hp = hp;
    }

    void attack() {
    	System.out.println(name + "이(가) 공격했다!");
    }
}

여기서 Dragon을 상속받은 FlyingDragon을 만들어보자!


✈️ 2. 상속 사용하기

public class FlyingDragon extends Dragon { // FlyingDragon은 Dragon을 상속받음

    void fly() {
        System.out.println(name + "이(가) 하늘을 날고 있다!");
    }
}

FlyingDragon extends Dragon
FlyingDragon은 Dragon상속받아서 name과 hp, attack()을 모두 물려받음.


🧙‍♂️ 3. 상속받은 클래스 사용하기

public class Main {

    public static void main(String[] args) {
        FlyingDragon flyingDragon = new FlyingDragon("날아라 불사조", 500);
        System.out.println(flyingDragon.name); // 날아라 불사조

        flyingDragon.attack(); // 날아라 불사조가 공격했다!
        flyingDragon.fly(); // 날아라 불사조가 하늘을 날고 있다!
    }
}

FlyingDragon은 Dragon의 모든 능력을 물려받고, fly()라는 새로운 능력을 추가함!


🧩 4. 상속의 특징

  • 부모 클래스의 속성메서드를 모두 물려받음.
  • 자식 클래스는 새로운 메서드속성을 추가할 수 있음.
  • 상속받은 메서드는 그대로 사용하거나 재정의(오버라이딩)할 수 있음.

🔄 5. 메서드 오버라이딩 (재정의)

만약 FlyingDragon자신만의 공격 방식을 갖고 싶다면?
바로 메서드를 오버라이딩해서 새롭게 정의할 수 있어!

public class FlyingDragon extends Dragon {

    void attack() {
    	System.out.println(name + "이(가) 불을 뿜었다!");
    }

    void fly() {
    	System.out.println(name + "이(가) 하늘을 날고 있다!");
    }
}

FlyingDragon은 attack() 메서드를 오버라이딩하여 불을 뿜는 공격을 추가!


🧠 정리 타임

개념의미예시
상속 부모 클래스의 속성, 메서드를 자식 클래스가 물려받음 public class FlyingDragon extends Dragon
부모 클래스 다른 클래스에서 상속받을 수 있는 클래스 Dragon
자식 클래스 부모 클래스를 상속받아 새로운 기능을 추가한 클래스 FlyingDragon
메서드 오버라이딩 부모 클래스의 메서드를 자식 클래스에서 다시 정의 void attack() { ... }

🎮 실전 미션 – 슈퍼 영웅 만들기

public class Hero {

    String name;
    int level;

    public Hero(String n, int l) {
        name = n;
        level = l;
    }

    void attack() {
    	System.out.println(name + "이(가) 공격했다!");
    }
}
public class SuperHero extends Hero { // SuperHero는 Hero를 상속받음

    void specialAttack() {
        System.out.println(name + "이(가) 슈퍼 공격을 했다!");
    }
}
public class Main {

    public static void main(String[] args) {
        SuperHero hero1 = new SuperHero("철수", 10);
        
        hero1.attack(); // 철수가 공격했다!
        hero1.specialAttack(); // 철수가 슈퍼 공격을 했다!
    }
}

✨ 마무리 요약

상속을 이용하면, 기존 클래스의 능력을 그대로 물려받고,
새로운 기능만 추가할 수 있어.
이제 너는 기존 코드확장하고, 새로운 클래스효율적으로 만들 수 있는 능력을 손에 쥔 거야.


다음 11단원에서는 인터페이스에 대해 배워볼 거야.
인터페이스는 클래스의 설계도처럼, 어떤 행동을 해야 하는지 정의하는 문서 같아.
이걸 통해, 다양한 클래스들이 공통적인 행동을 할 수 있도록 만들 수 있어!