예제
abstract class Car{
abstract void run();
}
class Ambulance extends Car{
void run() {System.out.println("Ambulance is running!");}
}
class Cultivator extends Car{
void run() {System.out.println("Cultivator is running!");}
}
class SportsCar extends Car{
void run() {System.out.println("SportsCar is running!");}
}
public class Oop_polymorphism03{
public static void main(String[] args) {
//[1] : 객체생성
Car c1 = new Ambulance();
Car c2 = new Cultivator();
Car c3 = new SportsCar();
//[2] : run() 메서드 호출
c1.run();
c2.run();
c3.run();
}
}
Ambulance is running!
Cultivator is running!
SportsCar is running!
클래스 선언
이 코드에서는 다음의 4개 클래스가 선언되어 있다.
- Car : 추상 클래스로, run() 이라는 추상 메서드를 포함한다.
- Ambulance, Cultivator, SportsCar : Car 클래스를 상속받는 자식 클래스 이다. 이 들은 run() 메서드를 오버라이드 하여 각 클래스의 특성에 맞게 구현하였다.
객체 생성과 메서드 호출
main() 메서드에서는 각 자식 클래스의 인스턴스를 생성하고, run() 메서드를 호출한다.
다형성에 따라, 각 인스턴스는 Car 타입의 참조변수로 참조된다. 이렇게 하면 자식 클래스가 어떤 것인지 상관없이 run() 메서드를 호출할 수 있다.
주의점 및 필수내용
- 추상 클래스는 인스턴스를 만들 수 없다. 대신, 추상 클래스를 상속받는 자식 클래스의 인스턴스를 생성할 수 있다.
- 상속받은 추상 메서드는 반드시 오버라이드 해야한다.
- 부모 클래스 타입의 참조 변수로 자식 클래스의 인스턴스를 참조할 수 있다. 이를 이용해 다양한 형태의 객체를 하나의 참조 변수로 관리할 수 있다. 이것이 다형성이다.
- 메서드 호출 시, 참조 변수의 타입이 아닌 인스턴스의 실제 타입에 따라 오버라이드된 메서드가 실행된다. 이것을 동적 메서드 디스패치 또는 가상 메서드 호출이라고 한다.

'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
| 자바 part.4 문제풀이 - 다형성 이해 : 객체 배열과 매개변수 활용 (0) | 2023.07.27 |
|---|---|
| 자바 part.4 문제풀이 - 다형성과 추상 클래스를 이용한 객체 배열 생성과 활용 (0) | 2023.07.27 |
| 자바 part.4 문제풀이 - 자바 다형성 : super와 casting사용 (0) | 2023.07.27 |
| 자바 part.4 문제풀이 - 자바의 다형성(polymorphism) (0) | 2023.07.27 |
| 자바 part.4 문제풀이 - 인터페이스와 상속 활용하기 (0) | 2023.07.26 |