다형성 (Polymorphism) - 2

DONI·2021년 9월 11일
0

Java

목록 보기
36/46
post-thumbnail

🏹 다운 캐스팅 (Down Casting)

부모 타입의 참조형 변수를 자식 타입으로 강제 형변환하여 자식 객체의 멤버를 참조하는 것


🏹 instanceof 연산자

현재 참조형 변수가 어떤 클래스 타입의 객체 주소를 참조하고 있는지 확인하고자 할 때 사용
클래스 타입이 맞으면 true, 맞지 않으면 false 반환


🏹 바인딩 (binding)

실제 실행할 메서드 코드와 메서드를 호출하는 코드를 연결하는 것

  • 정적 바인딩
    : 프로그램이 실행되기 전 컴파일 단계에서 연결

  • 동적 바인딩
    : 프로그램을 실행할 당시의 객체 타입의 오버라이딩된 메서드로 연결

    ⭐ 상속 관계로 이루어져 다형성이 적용된 경우,
         메서드 오버라이딩이 되어있으면 오버라이딩된 메서드 코드를 우선적으로 수행한다!


🚩 소스코드 - 다운 캐스팅

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() {
		Car[] carArr = {
				new Car(8, "큰 원형 핸들", "v8 디젤 엔진"), 
				new TeslaCar(4, "기능 많은 핸들", "전기 모터", 50000), 
				new RollsRoyce(6, "금붙이 핸들", "디젤 엔진", "갈색우산"),
				new Spark(4, "조그만 원형 핸들", "가솔린 엔진", 0.5)
		};
		
		for (int i = 0; i < carArr.length; i++) {
			if (carArr[i] instanceof TeslaCar)
				System.out.println(((TeslaCar)carArr[i]).getBatteryCapacity());
			else if (carArr[i] instanceof RollsRoyce)
				System.out.println(((RollsRoyce)carArr[i]).getUmbrellaColor());
			else if (carArr[i] instanceof Spark)
				System.out.println(((Spark)carArr[i]).getDiscountOffer());
			else // Car 자료형인 경우
				System.out.println(carArr[i].toString());
		}
	}
}
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글