package ch07.sec08.exam01;
public class Tire {
public void roll() {
System.out.println("회전합니다.");
}
}
package ch07.sec08.exam01;
public class HankookTire extends Tire {
@Override
public void roll() {
System.out.println("한국 타이어 회전");
}
}
package ch07.sec08.exam01;
public class KumhoTire extends Tire {
@Override
public void roll() {
System.out.println("금호 타이어 회전");
}
}
package ch07.sec08.exam01;
public class Car {
// 필드 선언
public Tire tire;
public void run() {
// tire 필드에 대입된 객체의 roll() 메소드 호출
tire.roll();
}
}
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(); // 금호 타이어 회전
}
}
2. 매개변수 다형성
대입되는 매개값에 따라 실행 결과가 다양하다.
매개 변수의 타입이 클래스일 경우, 해당 클래스의 객체뿐만 아니라 자식 객체까지 매개값으로 사용 가능하다.
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 drive(Vehicle vehicle) {
vehicle.run();
}
}
package ch07.sec08.exam02;
public class DriverExample {
public static void main(String[] args) {
Driver driver = new Driver();
// 매개값으로 Bus 객체 제공하고 driver() 메소드 호출
Bus bus = new Bus();
driver.drive(bus); // drive.drive(new Bus());와 동일
Taxi taxi = new Taxi();
driver.drive(taxi);
Vehicle vehicle = new Vehicle();
driver.drive(vehicle);
}
}