다형성 (Polymorphism) - 1

DONI·2021년 8월 26일
0

Java

목록 보기
35/46
post-thumbnail

🏹 다형성 (Polymorphism)

'다양한 형태를 갖는다' 라는 뜻으로, 하나의 행동으로 여러 가지 일을 수행하는 개념
상속을 이용한 기술로, 하나의 부모타입 참조변수로 여러 타입의 자식 객체를 참조 가능한 것


🏹 업 캐스팅 (Up Casting)

부모 타입의 참조형 변수로 모든 자식 타입의 객체를 참조할 수 있는 것
  ⭐ 자식 객체의 주소를 전달 받은 부모 타입의 참조변수를 통해서
       접근할 수 있는 객체 정보는 부모로부터 상속 받은 멤버만 참조 가능!
       (자식 객체의 멤버는 참조 불가)


🚩 소스코드 - 업 캐스팅 활용

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;
	}
}
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글