728x90
다형성(Polymorphism)
하나의 객체가 여러가지 타입을 가질 수 있으며 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질이다.
객체 사용 방법이 동일하다는 것은 동일한 메소드를 가지고 있다는 뜻이다.
1. 필드 다형성
필드 타입(사용 방법)은 동일하지만 대입되는 객체에 따라 실행 결과가 다양하다.
예제 코드
더보기
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);
}
}
728x90
'IT > Java' 카테고리의 다른 글
[Java] abstract class & method (0) | 2024.03.08 |
---|---|
[Java] instanceof (0) | 2024.03.08 |
[Java] 자동 타입 변환 & 강제 타입 변환 (0) | 2024.03.08 |
[Java] Method Overriding (0) | 2024.03.07 |
[Java] 상속(Inheritance) (1) | 2024.03.07 |