본문 바로가기
Java_language

상속이란?

by 헬로제이콥 2025. 12. 1.

자바의 상속을 두 파일(Vehicle.java, Car.java)로 나누어 예제와 실행 결과까지 제공합니다.

상속이란?

  • 상속은 부모가 자식에게 물려주는 것과 같아요.
  • 클래스끼리도 부모 클래스(기본 기능)를 만들면, 자식 클래스가 그 기능을 그대로 물려받아 쓸 수 있어요.
  • 예를 들어 부모가 자동차 소리를 내는 방법을 알고 있으면, 자식은 그 방법을 다시 만들 필요 없이 그대로 사용할 수 있어요.
  • 이렇게 하면 코드가 더 간단하고 반복을 줄일 수 있어요.

비유:

  • 부모님(부모 클래스)이 장난감 만드는 법을 알고 있으면, 아이(자식 클래스)는 그 장난감을 바로 만들 수 있어요. 아이는 부모가 알려준 것 외에 자기만의 장난감(추가 속성/메서드)도 가질 수 있어요.

핵심 포인트

  • extends 키워드를 사용하면 한 클래스가 다른 클래스를 상속받습니다.
  • 상속받은 멤버(변수/메서드)는 자식 클래스에서 바로 사용 가능해요(접근 허용 범위에 따라 다름).
  • protected는 같은 패키지나 자식 클래스에서 접근할 수 있는 표시입니다.

파일 분리된 예제

아래처럼 두 파일로 나누어 저장하세요. 같은 폴더(패키지)에 두 파일을 넣으면 됩니다.

  1. Vehicle.java (부모 클래스)

java

public class Vehicle {
    // 보호된(protected) 속성: 자식 클래스에서 접근 가능
    protected String brand = "Ford";

    // 부모가 가진 기능(메서드)
    public void honk() {
        System.out.println("Tuut, tuut!");
    }
}
  1. Car.java (자식 클래스 — Vehicle을 상속)

java

public class Car extends Vehicle {
    // Car만의 속성 (private로 숨김)
    private String modelName = "Mustang";

    public static void main(String[] args) {
        // Car 객체 생성
        Car myCar = new Car();

        // 부모 클래스의 메서드 사용 (상속받았음)
        myCar.honk();

        // 부모 클래스의 protected 속성도 사용 가능
        System.out.println(myCar.brand + " " + myCar.modelName);
    }
}

설명(간단히)

  • Car 클래스는 "extends Vehicle"로 Vehicle을 상속받았습니다.
  • myCar.honk()는 Vehicle에 있는 honk()를 그대로 호출한 것입니다.
  • brand는 Vehicle에서 protected로 선언되어 Car 클래스 안에서 바로 쓸 수 있습니다.
  • modelName은 Car만 가지고 있는 고유한 정보입니다.

실행 결과(콘솔 출력)

 
Tuut, tuut!
Ford Mustang

추가 팁

부모 클래스: 기본 기능을 주는 사람

  • 자식 클래스: 그 기능을 물려받아 쓰는 사람 + 자신만의 기능도 가질 수 있음



예제 제공

Car에 색상(color) 속성을 추가하고, 여러 자동차를 만들어 각기 다른 색을 출력하는 예제를 클래스 파일로 분리해서 쉽게 설명드리겠습니다. 

핵심 아이디어 (아주 쉽게)

  • 부모 클래스(Vehicle)는 기본 기능(브랜드와 경적)을 물려줍니다.
  • 자식 클래스(Car)는 부모의 기능을 쓰면서 자신의 색상(color)과 모델(modelName)을 가집니다.
  • 여러 Car 객체를 만들어 각 자동차의 색상을 출력하면 색상이 객체마다 다르게 유지되는 것을 확인할 수 있습니다.

파일 분리된 예제

같은 폴더에 아래 두 파일을 저장해서 사용하세요.

  1. Vehicle.java (부모 클래스)

java

public class Vehicle {
    protected String brand = "Ford";  // 부모가 가진 브랜드
    public void honk() {
        System.out.println("Tuut, tuut!");
    }
}
  1. Car.java (자식 클래스 — 색상 추가)

java

public class Car extends Vehicle {
    private String modelName;   // 모델 이름
    private String color;       // 새로 추가한 색상 속성

    // 생성자: 모델 이름과 색상을 받아 초기화
    public Car(String modelName, String color) {
        this.modelName = modelName;
        this.color = (color == null || color.trim().isEmpty()) ? "무색" : color;
    }

    // 색상 Getter
    public String getColor() {
        return color;
    }

    // 색상 Setter
    public void setColor(String color) {
        if (color != null && !color.trim().isEmpty()) {
            this.color = color;
        }
    }

    // 자동차 정보 출력
    public void printInfo() {
        System.out.println(brand + " " + modelName + " - 색상: " + color);
    }

    // 테스트용 main: 여러 자동차 생성 후 색상 출력
    public static void main(String[] args) {
        Car car1 = new Car("Mustang", "Red");
        Car car2 = new Car("Fiesta", "Blue");
        Car car3 = new Car("Explorer", "White");

        // 부모의 메서드(경적) 호출
        car1.honk();

        // 각 자동차 정보 출력 (색상이 서로 다름)
        car1.printInfo();
        car2.printInfo();
        car3.printInfo();

        // 색상 변경 예시
        car2.setColor("Green");
        System.out.println("변경 후:");
        car2.printInfo();
    }
}

실행(콘솔) 결과 예시

 
Tuut, tuut!
Ford Mustang - 색상: Red
Ford Fiesta - 색상: Blue
Ford Explorer - 색상: White
변경 후:
Ford Fiesta - 색상: Green

한 문장 요약

  • 부모는 기본 기능을 주고, 자식은 거기다 색깔같이 자기만의 것을 추가해서 여러 개 만들면 각각 다른 색을 가질 수 있어요.

'Java_language' 카테고리의 다른 글

다형성  (0) 2025.12.03
상속  (0) 2025.12.03
자바의 import  (0) 2025.12.01
클래스 변수 vs 인스턴스  (0) 2025.12.01
캡슐화 (private)  (0) 2025.12.01