JAVA

객체지향(상속)

jki09871 2024. 7. 24. 12:00

상속(Inheritance) 개념

상속은 하나의 클래스가 다른 클래스를 기반으로 하여 새로운 기능을 추가하거나 기존의 기능을 확장할 때 사용됩니다. 상속을 통해 클래스 간의 관계를 정의하고, 기존 클래스의 속성과 메서드를 재사용하여 새로운 클래스를 만들 수 있습니다.

기본 용어

  1. 부모 클래스 (Parent Class):
    • 상속을 제공하는 클래스입니다. 슈퍼 클래스 또는 기반 클래스라고도 합니다.
    • 공통된 속성과 메서드를 정의합니다.
  2. 자식 클래스 (Child Class):
    • 부모 클래스를 상속받아 새로운 클래스를 정의합니다. 서브 클래스 또는 파생 클래스라고도 합니다.
    • 부모 클래스의 속성과 메서드를 상속받아 사용할 수 있으며, 필요에 따라 새로운 속성과 메서드를 추가할 수 있습니다.

상속의 기본 문법

상속을 구현하기 위해 extends 키워드를 사용합니다. 자식 클래스는 extends 키워드를 사용하여 부모 클래스를 상속받습니다.

// 부모 클래스
public class Parent {
    // 부모 클래스의 필드
    int number;

    // 부모 클래스의 메서드
    public void showNumber() {
        System.out.println("Number: " + number);
    }
}

// 자식 클래스
public class Child extends Parent {
    // 자식 클래스의 필드
    String text;

    // 자식 클래스의 메서드
    public void showText() {
        System.out.println("Text: " + text);
    }
}

상속의 주요 특징

  1. 속성과 메서드 재사용:
    • 자식 클래스는 부모 클래스의 모든 비공개(private) 멤버를 제외한 속성과 메서드를 상속받아 재사용할 수 있습니다.
    • 자식 클래스는 부모 클래스에서 정의된 메서드를 호출하거나, 필요에 따라 메서드를 오버라이드(재정의)하여 기능을 수정할 수 있습니다.
  2. 확장성:
    • 상속을 통해 기존 클래스의 기능을 확장할 수 있습니다. 새로운 기능을 추가하거나 기존 기능을 변경할 수 있습니다.
  3. 계층적 구조:
    • 상속을 통해 클래스 간에 계층적인 구조를 만들 수 있습니다. 예를 들어, Animal 클래스가 Dog와 Cat 클래스를 부모 클래스로 가질 수 있습니다.
  4. 다형성:
    • 상속을 통해 다형성(polymorphism)을 구현할 수 있습니다. 다형성은 동일한 메서드 호출이 다른 동작을 수행할 수 있게 하는 개념입니다. 예를 들어, Animal 클래스의 makeSound() 메서드를 Dog와 Cat 클래스에서 다르게 구현할 수 있습니다.

예제: 간단한 상속

// 부모 클래스
public class Vehicle {
    // 속성
    String brand;

    // 메서드
    public void start() {
        System.out.println(brand + " vehicle is starting.");
    }
}

// 자식 클래스
public class Car extends Vehicle {
    // 추가된 속성
    int numberOfDoors;

    // 추가된 메서드
    public void openDoors() {
        System.out.println("Opening " + numberOfDoors + " doors.");
    }
}

// 메인 클래스
public class Main {
    public static void main(String[] args) {
        // Car 객체 생성
        Car myCar = new Car();
        myCar.brand = "Toyota";
        myCar.numberOfDoors = 4;

        // 상속받은 메서드 호출
        myCar.start(); // "Toyota vehicle is starting."

        // 자식 클래스의 메서드 호출
        myCar.openDoors(); // "Opening 4 doors."
    }
}

설명

  1. 부모 클래스 (Vehicle):
    • Vehicle 클래스는 brand 속성과 start() 메서드를 정의합니다. 이 클래스는 일반적인 차량의 기능을 제공합니다.
  2. 자식 클래스 (Car):
    • Car 클래스는 Vehicle 클래스를 상속받아 brand 속성과 start() 메서드를 사용합니다.
    • Car 클래스는 numberOfDoors 속성과 openDoors() 메서드를 추가하여 Car에 특화된 기능을 제공합니다.
  3. 메인 클래스 (Main):
    • main 메서드에서 Car 클래스의 인스턴스를 생성하고, 부모 클래스에서 상속받은 start() 메서드와 자식 클래스에서 추가된 openDoors() 메서드를 호출합니다.

요약

  • 상속을 통해 자식 클래스는 부모 클래스의 속성과 메서드를 재사용할 수 있으며, 새로운 기능을 추가하거나 기존 기능을 확장할 수 있습니다.
  • 상속은 코드의 재사용성을 높이고, 계층적 구조를 만들며, 다형성을 지원합니다.
  • 상속을 구현할 때는 extends 키워드를 사용하여 부모 클래스를 지정하고, 자식 클래스에서 부모 클래스의 기능을 상속받아 사용할 수 있습니다.