다형성

류정훈·2022년 12월 23일
0

학습내용

목록 보기
7/15

다형성

다양한 형태의 성질을 지님

  • 상속+컴퓨터의 연산규칙(잩은 자료형끼리만 연산 가능) + 얕은복사

다향성 특징 <암기>

상속을 이용한 기술로 부모 클래스의 타입 참조변수 하나로 상속 관계에 있는 여러 타입의 자식 객체를 참조할 수 있는 기술

  • 부모클래스 변수명 = new 자식클래스();

클래스 형변환

업 캐스팅(Up Casting)

상속 관계에 있는 부모, 자식 클래스 간에 부모타입의 참조형 변수가
모든 자식 타입 객체의 주소를 참조할 수 있음

Car car = new Sonata();
Car car2 = new Tesla();

다운 캐스팅

자식 객체의 주소를 받은 부모 참조형 변수를 가지고 자식의 멤버를 참조해야 할 경우,
부모 클래스 타입의 참조형 변수를 자식 클래스 타입으로 형변환 하는 것
자동으로 처리되지 않기 때문에 반드시 자식 타입을 명시하여 형변환

Car c = new Sonata();
((Sonata)c).moveSonata();

바인딩

	Car c1 = new Car("경유엔진","경유",8);
		System.out.println(c1.getEngine());

//Car객체에 있는 getengine()메소드를 호출 ==바인딩 (맨날쓰고있었음)
//string edu.kh.poly.model.vo.Car.getEngine()

Car c2 = new Spark("경차 엔진","휘발유",4,0.5);
	System.out.println(c2.toString());

//String edu.kh.poly.model.vo.Car.toString()

  • 참조변수 c2가 car타입이므로
    toString()도 Car의 toString()을 호출 - 정적바인딩
    실행해보면 자식 Spark의 toString이 호출되는것을 확인
    -> 컴파일시에는 부모(Car)와 바인딩 == 정적바인딩
    -> 실행시에는 자식(Spark)와 오버라이딩된 메소드와 바인딩 == 동적바인딩

동적 바인딩 활용방법

Car[] arr =  {
			new Car("경유엔진", "경유", 12),
			new Tesla("전기모터", "전기",4,50000),
			new Spark("경차엔진", "무연", 4,0.3)
		};
       for(int i = 0; i < arr.length; i++) {
			System.out.println(i+"번째 요소: "+ arr[i].toString());
  • 실행전 : String edu.kh.poly.model.vo.Car.toString() - 정적 바인딩 상태
  • 실행후:각 객체의 오버라이딩 된 toString()이 호출됨 - 동적바인딩

동적 바인딩 장점

  • 업캐스팅 상태의 참조변수를
    별도의 다운캐스팅 없이
    자식의 오버라이딩된 메소드를 수행할 수 있음.
profile
It works...why?

0개의 댓글