
자바의 상속을 두 파일(Vehicle.java, Car.java)로 나누어 예제와 실행 결과까지 제공합니다.
상속이란?
- 상속은 부모가 자식에게 물려주는 것과 같아요.
- 클래스끼리도 부모 클래스(기본 기능)를 만들면, 자식 클래스가 그 기능을 그대로 물려받아 쓸 수 있어요.
- 예를 들어 부모가 자동차 소리를 내는 방법을 알고 있으면, 자식은 그 방법을 다시 만들 필요 없이 그대로 사용할 수 있어요.
- 이렇게 하면 코드가 더 간단하고 반복을 줄일 수 있어요.
비유:
- 부모님(부모 클래스)이 장난감 만드는 법을 알고 있으면, 아이(자식 클래스)는 그 장난감을 바로 만들 수 있어요. 아이는 부모가 알려준 것 외에 자기만의 장난감(추가 속성/메서드)도 가질 수 있어요.
핵심 포인트
- extends 키워드를 사용하면 한 클래스가 다른 클래스를 상속받습니다.
- 상속받은 멤버(변수/메서드)는 자식 클래스에서 바로 사용 가능해요(접근 허용 범위에 따라 다름).
- protected는 같은 패키지나 자식 클래스에서 접근할 수 있는 표시입니다.
파일 분리된 예제
아래처럼 두 파일로 나누어 저장하세요. 같은 폴더(패키지)에 두 파일을 넣으면 됩니다.
- Vehicle.java (부모 클래스)
java
public class Vehicle {
// 보호된(protected) 속성: 자식 클래스에서 접근 가능
protected String brand = "Ford";
// 부모가 가진 기능(메서드)
public void honk() {
System.out.println("Tuut, tuut!");
}
}
- 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 객체를 만들어 각 자동차의 색상을 출력하면 색상이 객체마다 다르게 유지되는 것을 확인할 수 있습니다.
파일 분리된 예제
같은 폴더에 아래 두 파일을 저장해서 사용하세요.
- Vehicle.java (부모 클래스)
java
public class Vehicle {
protected String brand = "Ford"; // 부모가 가진 브랜드
public void honk() {
System.out.println("Tuut, tuut!");
}
}
- 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 |