상속

sungs·2025년 6월 5일

자바

목록 보기
7/95

✅ 상속이란?

상속이란 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 기능이다.

class Animal {
    void eat() {
        System.out.println("먹는다");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("짖는다");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog d = new Dog();
        d.eat();  // 부모 클래스 메서드 사용
        d.bark(); // 자식 클래스 메서드 사용
    }
}

위 예제에서 Dog 클래스는 Animal 클래스를 상속받아 eat() 메서드를 사용할 수 있다.

🔧 문법 정리

class 부모클래스 {
    // 필드, 생성자, 메서드
}

class 자식클래스 extends 부모클래스 {
    // 자식 클래스만의 필드, 생성자, 메서드
}
  • extends 키워드를 사용해 상속을 구현한다.

  • 자식 클래스는 부모 클래스의 필드와 메서드를 그대로 사용할 수 있다.

  • 단, 생성자는 상속되지 않는다.

🔁 메서드 오버라이딩(Overriding)

자식 클래스는 부모 클래스의 메서드를 재정의(override)할 수 있다.

class Animal {
    void sound() {
        System.out.println("동물 소리");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹");
    }
}
  • @Override는 컴파일러에게 재정의했음을 알리는 어노테이션이다. (선택은 아니고 권장)

  • 오버라이딩 시에는 메서드 시그니처가 동일해야 한다.

🚫 Java는 다중 상속을 지원하지 않는다

Java에서는 클래스 간 다중 상속은 지원하지 않는다.

class A { }
class B { }

// ❌ Error: Java does not support multiple inheritance
class C extends A, B { }

이러한 문제를 해결하기 위해 Java는 인터페이스를 제공한다. (implements 키워드 사용)

🧱 super 키워드

자식 클래스에서 부모 클래스의 멤버를 명시적으로 사용할 때 super를 사용한다.

class Animal {
    void sound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    void sound() {
        super.sound(); // 부모 메서드 호출
        System.out.println("멍멍");
    }
}

또한, 생성자에서 부모 생성자를 호출할 때도 super()를 사용한다.

🧩 상속의 장점과 단점

✔️ 장점

  • 코드 재사용 → 중복 감소

  • 유지보수 용이

  • 다형성 구현 가능

❗ 단점

  • 관계가 너무 복잡해질 수 있음

  • 잘못 사용하면 의존성이 강해져 유지보수가 어려워짐

🎯 한줄 요약

상속은 "공통 기능은 부모에게, 특수 기능은 자식에게"라는 원칙으로 객체지향의 핵심을 실현하는 도구.

profile
앱 개발 공부 중

0개의 댓글