자바의 다단계 상속(Multilevel Inheritance)은 하나의 클래스가 다른 클래스로부터 속성과 기능을 상속받고, 그 클래스가 다시 또 다른 클래스로부터 상속받는 구조를 말합니다. 즉, 조상 클래스 → 부모 클래스 → 자식 클래스처럼 상속 관계가 사슬(체인) 형태로 이어지는 상속 방식입니다.
예를 들어 Shape → Rectangle → Cube 순서로 상속된다면, 최하위 클래스인 Cube는 자신의 멤버뿐만 아니라 상위 두 클래스의 모든 멤버도 사용할 수 있습니다.
다단계 상속 예제
아래 예제에서 Rectangle 클래스는 Shape 클래스를 상속받고, Cube 클래스는 다시 Rectangle 클래스를 상속받습니다.
class Shape {
public void display() {
System.out.println("Inside display");
}
}
class Rectangle extends Shape {
public void area() {
System.out.println("Inside area");
}
}
class Cube extends Rectangle {
public void volume() {
System.out.println("Inside volume");
}
}
public class Tester {
public static void main(String[] arguments) {
Cube cube = new Cube();
cube.display();
cube.area();
cube.volume();
}
}실행 결과
Inside display Inside area Inside volume
코드 설명
- Shape 클래스: 최상위 부모 클래스로,
display()메서드를 정의합니다. - Rectangle 클래스:
extends키워드를 사용해Shape를 상속하며, 고유한 메서드인area()를 추가로 정의합니다. - Cube 클래스:
Rectangle을 상속하며,volume()메서드를 정의합니다. 따라서Shape와Rectangle의 모든 기능을 물려받습니다.
Tester 클래스의 main 메서드에서 Cube 객체를 생성하면, 해당 객체를 통해 세 클래스에 정의된 모든 메서드를 호출할 수 있습니다. 실행 결과에서 볼 수 있듯이 display(), area(), volume()이 순서대로 출력됩니다.
다단계 상속의 핵심 포인트
- 자바는 클래스 간의 다중 상속은 지원하지 않지만, 다단계 상속은 문제없이 지원합니다.
- 상속 깊이가 깊어질수록 하위 클래스는 상위 클래스의 모든 public·protected 멤버에 접근할 수 있습니다.
- 상속 계층이 과도하게 깊어지면 코드 복잡도가 높아질 수 있으므로, 일반적으로 2~3단계 수준의 적절한 깊이를 유지하는 것이 좋습니다.