'다양한 형태를 갖는다'
라는 뜻으로, 하나의 행동으로 여러 가지 일을 수행하는 개념
상속을 이용한 기술로, 하나의 부모타입 참조변수로 여러 타입의 자식 객체를 참조 가능한 것
부모 타입의 참조형 변수로 모든 자식 타입의 객체를 참조할 수 있는 것
⭐ 자식 객체의 주소를 전달 받은 부모 타입의 참조변수를 통해서
접근할 수 있는 객체 정보는 부모로부터 상속 받은 멤버만 참조 가능!
(자식 객체의 멤버는 참조 불가)
1) 객체 배열
import edu.kh.poly.ex1.model.vo.Car;
import edu.kh.poly.ex1.model.vo.RollsRoyce;
import edu.kh.poly.ex1.model.vo.Spark;
import edu.kh.poly.ex1.model.vo.TeslaCar;
public class PolymorphismService {
public void example1() {
TeslaCar tesla = new TeslaCar(4, "원형", "전기모터", 5000);
RollsRoyce royce = new RollsRoyce(4, "원형", "경유엔진", "검정");
Spark spark = new Spark(4, "원형", "휘발유 엔진", 0.5);
Car[] arr = new Car[3];
arr[0] = tesla;
arr[1] = royce;
arr[2] = spark;
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i].getEngine());
}
}
2) 매개변수
import edu.kh.poly.ex1.model.vo.Car;
import edu.kh.poly.ex1.model.vo.RollsRoyce;
import edu.kh.poly.ex1.model.vo.Spark;
import edu.kh.poly.ex1.model.vo.TeslaCar;
public class PolymorphismService {
public void example2() {
TeslaCar tesla = new TeslaCar(4, "원형", "전기모터", 5000);
RollsRoyce royce = new RollsRoyce(4, "원형", "경유엔진", "검정");
Spark spark = new Spark(4, "원형", "휘발유 엔진", 0.5);
printEngine(tesla);
printEngine(royce);
printEngine(spark);
}
// 매개변수 다형성 적용
public void printEngine(Car c) {
System.out.println(c.getEngine());
}
}
3) 리턴타입
import edu.kh.poly.ex1.model.vo.Car;
import edu.kh.poly.ex1.model.vo.RollsRoyce;
import edu.kh.poly.ex1.model.vo.Spark;
import edu.kh.poly.ex1.model.vo.TeslaCar;
public class PolymorphismService {
public void example3() {
TeslaCar tesla = new TeslaCar(4, "원형", "전기모터", 5000);
RollsRoyce royce = new RollsRoyce(4, "원형", "경유엔진", "검정");
Spark spark = new Spark(4, "원형", "휘발유 엔진", 0.5);
Car c = createCar(1);
}
public Car createCar(int num) {
Car c = null;
switch(num) {
case 1: new TeslaCar(); break;
case 2: new RollsRoyce(); break;
case 3: new Spark(); break;
}
return c;
}
}