JUST GO

[공통] 다형성 본문

Java/학습내용

[공통] 다형성

root_go 2022. 10. 13. 17:10

다형성

  • 다형성(Polymorphism)은 하나의 객체가 다른 타입으로 변할 수 있는 속성/특징을 의미한다.
  • 업 캐스팅(Upcasting) : '자동 형변환'이 일어난다고 하기도 하며, 자식  타입의 객체(인스턴스)가 부모 타입으로 형 변환하는 것을 의미한다.
Human poong = new Human();
Animal upPig = poong; // 업캐스팅 (자동 형변환)
Object upObj = upPig; // 업캐스팅 (자동 형변환)
pigObj.eat(); 못 씀

Animal downPig = (Animal) upObj; // 강제형변환
Human downPoong = (Human) downPig;
downPoong.eat();
  • 다운 캐스팅(Downcating) : '강제 형변환'한다 라고 하기도 하며, 부모 타입의 객체(인스턴스)가 자식  타입으로 형 변환하는 것을 의미한다. 단, 말 그대로 강제 형변환임으로 변환할 수 없는 경우 ClassCastException 이 발생함으로 반드시 instanceOf를 사전에 사용해 강제 형변환이 가능한지 확인해야 한다. 다운캐스팅의 피연산자인 변수의 근본이 변환하고자 하는 형으로 변환될 수 없다면 다운캐스팅할 수 없다.
Human poong = new Human();
Object upObj = poong;
if (upObj instanceof Animal){
// 좌항 객체가 우항 타입으로 형 변환 될 수 있는가의 여부를 구한다.
Animal downAnimal = (Animal) upObj;
System.out.println("변환했음!");
} else {
System.out.println("변환 못했음.");
}
Animal downAnimal = (Animal) upObj; // 다운캐스팅(강제 형변환)
// java.lang.ClassCastException: class java.lang.String cannot be cast to class rootgo.dev.Animal ...
Human downHuman = (Human) downAnimal;

// long bigNumber = 13L;
// int smallNumber = (int) bigNumber;
  • 외울 것 : 부모 타입의 변수는 자식 객체를 받을 수 있다.

 

'Java > 학습내용' 카테고리의 다른 글

[공통] 자료구조  (0) 2022.10.19
[공통] 구현  (0) 2022.10.14
[공통] 상속  (0) 2022.10.13
[공통] 열거형  (0) 2022.10.13
[공통] 예외  (0) 2022.10.12