충분히 쌓여가는
7.8 다형성 - 매개변수 다형성 본문
메소드가 클래스 타입의 매개변수를 가지고 있을 경우, 호출할 때 동일한 타입의 객체를 제공하는 것이 정석이지만 자식 객체를 제공할 수도 있다
Drive 클래스가 있고, Vehicle 매개변수를 갖는 drive() 메소드가 정의되어 있다
drive() 메소드는 매개값으로 전달받은 vehicle의 run() 메소드를 호출한다
pulbic class Driver {
public void dirve(Vehicle vehicle) {
vehicle.run();
}
}
dirve() 메소드를 호출한다면 밑의 코드와 같이 Vehicle 객체를 제공한다
Driver driver = new Driver();
Vehicle vehicle = new Vehicle();
driver.drive(vehicle);
그러나 매개값으로 Vehicle 객체만 제공할 수 있는 것은 아니다
자동 타입 변환으로 인해 Vehicle의 자식 객체도 제공할 수 있다
drive() 메소드는 매개변수 vehicle이 참조하는 객체의 run() 메소드를 호출하는데,
자식 객체가 run() 메소드를 재정의하고 있다면 재정의된 run() 메소드가 호출된다
그러므로 어떤 자식 객체가 제공되느냐에 따라 drive()의 실행 결과는 달라진다
예제
package ch07.sec08.exam02;
public class Vehicle {
public void run() {
System.out.println("차량이 달립니다");
}
}
package ch07.sec08.exam02;
public class Bus extends Vehicle {
@Override
public void run() {
System.out.println("버스가 달립니다");
}
}
package ch07.sec08.exam02;
public class Taxi extends Vehicle {
@Override
public void run() {
System.out.println("택시가 달립니다");
}
}
package ch07.sec08.exam02;
public class Driver {
public void dirve(Vehicle vehicle) {
vehicle.run();
}
}
package ch07.sec08.exam02;
public class DriverExample {
public static void main(String[] args) {
Driver driver = new Driver();
Vehicle bus = new Bus();
driver.dirve(bus);
Vehicle taxi = new Taxi();
driver.dirve(taxi);
}
}
버스가 달립니다
택시가 달립니다
'이것이 자바다 > 07 상속' 카테고리의 다른 글
7.10 추상 클래스 (0) | 2024.04.02 |
---|---|
7.9 객체 타입 확인 - instanceof (0) | 2024.04.02 |
7.8 다형성 (0) | 2024.04.02 |
7.7 타입 변환 - 강제 타입 변환 (0) | 2024.04.02 |
7.7 타입 변환 - 자동 타입 변환 (0) | 2024.04.02 |