Java에서 상속(Inheritance)은 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나로, 기존 클래스(부모 클래스 또는 상위 클래스)의 속성(필드)과 메서드(행동)를 새로운 클래스(자식 클래스 또는 하위 클래스)가 물려받아 사용할 수 있게 하는 기능입니다. 상속을 통해 코드의 재사용성을 높이고, 객체 간 계층 구조를 형성할 수 있습니다.

상속의 기본 개념

상속을 사용하면 부모 클래스에서 정의된 필드와 메서드를 자식 클래스가 자동으로 사용할 수 있습니다. 자식 클래스는 부모 클래스의 기능을 그대로 상속받거나, 필요한 경우 이를 수정(오버라이딩, Overriding)하거나 확장할 수 있습니다.

1. 부모 클래스 (Superclass 또는 Base Class)

2. 자식 클래스 (Subclass 또는 Derived Class)

상속의 문법

상속을 정의하기 위해서는 extends 키워드를 사용합니다. 자식 클래스는 extends 키워드를 통해 부모 클래스와 연결됩니다.

class 부모클래스 {
    // 부모 클래스의 필드와 메서드
    String 이름;

    public void 소개() {
        System.out.println("저는 부모 클래스입니다.");
    }
}

class 자식클래스 extends 부모클래스 {
    // 자식 클래스의 추가 필드와 메서드
    public void 자식메서드() {
        System.out.println("저는 자식 클래스입니다.");
    }
}

public class 상속예제 {
    public static void main(String[] args) {
        자식클래스 자식 = new 자식클래스();
        자식.소개();        // 부모 클래스의 메서드 호출
        자식.자식메서드();  // 자식 클래스의 메서드 호출
    }
}

주요 상속 관련 개념

1. 메서드 오버라이딩 (Method Overriding)

자식 클래스에서 부모 클래스의 메서드를 재정의할 수 있습니다. 이를 통해 자식 클래스가 부모 클래스의 메서드를 자신에게 맞게 변경할 수 있습니다. 오버라이딩 시 메서드의 시그니처(이름, 매개변수, 반환형)는 동일해야 합니다.

class 부모클래스 {
    public void 소개() {
        System.out.println("저는 부모 클래스입니다.");
    }
}

class 자식클래스 extends 부모클래스 {
    @Override
    public void 소개() {  // 부모의 메서드를 재정의
        System.out.println("저는 자식 클래스입니다.");
    }
}

2. super 키워드

자식 클래스에서 부모 클래스의 필드나 메서드를 명시적으로 호출할 때 super 키워드를 사용합니다. 주로 오버라이딩된 메서드에서 부모 클래스의 원래 메서드를 호출할 때 사용됩니다.

class 부모클래스 {
    public void 소개() {
        System.out.println("저는 부모 클래스입니다.");
    }
}

class 자식클래스 extends 부모클래스 {
    @Override
    public void 소개() {
        super.소개();  // 부모 클래스의 소개 메서드 호출
        System.out.println("그리고 저는 자식 클래스입니다.");
    }
}

3. 다중 상속은 불가능 (Java에서)