반응형
이번 글에서는 부모 클래스 타입의 필드를 선언한 뒤,
여러 자식 클래스를 대입해 다형성을 구현하는 방법을 실습합니다.
이는 유지보수성과 확장성을 높이는 데 매우 중요한 기법입니다.
📦 부모 클래스 (Tire.java)
package ch07.sec08.exam01;
public class Tire {
public void roll() {
System.out.println("회전합니다.");
}
}
📦 자식 클래스 - 한국타이어 (HankookTire.java)
package ch07.sec08.exam01;
public class HankookTire extends Tire {
public void roll() {
System.out.println("한국 타이어가 회전합니다.");
}
}
📦 자식 클래스 - 금호타이어 (KumhoTire.java)
package ch07.sec08.exam01;
public class KumhoTire extends Tire {
public void roll() {
System.out.println("금호 타이어가 회전합니다.");
}
}
📦 자동차 클래스 (Car.java)
package ch07.sec08.exam01;
public class Car {
public Tire tire; // 부모 타입 필드
public void run() {
tire.roll(); // 다형적 메서드 호출
}
}
📌 실행 클래스 (CarExample.java)
package ch07.sec08.exam01;
public class CarExample {
public static void main(String[] args) {
Car car = new Car();
car.tire = new Tire();
car.run(); // 기본 타이어
car.tire = new HankookTire();
car.run(); // 한국 타이어
car.tire = new KumhoTire();
car.run(); // 금호 타이어
}
}
💻 실행 결과
회전합니다.
한국 타이어가 회전합니다.
금호 타이어가 회전합니다.
💬 코드 설명
- Tire는 모든 타이어의 공통 타입 (부모 클래스)
- HankookTire, KumhoTire는 Tire를 상속한 자식 클래스
- Car 클래스는 Tire 타입의 필드를 가짐 → 어떤 타이어든 대입 가능
- run() 메서드는 tire.roll()을 호출하지만,
실제로는 대입된 객체에 따라 다른 결과가 출력됨
📌 간단 정리
대입된 객체 | 실행 결과 |
new Tire() | 회전합니다. |
new HankookTire() | 한국 타이어가 회전합니다. |
new KumhoTire() | 금호 타이어가 회전합니다. |
💡 포인트 정리
- 부모 타입 필드에 자식 객체를 넣으면 자동 타입 변환(Promotion)
- 자식 클래스가 메서드를 오버라이딩하면 다형성으로 실제 메서드 실행
- 하나의 메서드 호출로 다양한 결과를 출력 → 유지보수성과 확장성 증가
- 인터페이스를 쓰면 더 유연한 구조로 확장 가능
'Java > 자바 정리' 카테고리의 다른 글
67. 추상 메서드와 다형성 – 자식이 반드시 구현해야 하는 기능 (1) | 2025.05.08 |
---|---|
66. 추상 클래스(Abstract Class) - 직접 생성 불가, 공통 기능 정의 (0) | 2025.05.08 |
65. 매개변수의 다형성 – 하나의 메서드로 여러 객체 동작시키기 (0) | 2025.05.08 |
63. 다운캐스팅(Downcasting)과 참조 타입의 한계 (0) | 2025.05.07 |
62. 다형성 (Polymorphism) – 부모 타입으로 자식 객체 참조하기 (0) | 2025.05.07 |
61. 자동 타입 변환 (Promotion) - 상속 관계에서의 업캐스팅 (0) | 2025.05.07 |