#예제1
[Service]
package pkg1.service;
import pkg1.dto.Child;
import pkg1.dto.Parent;
public class PolyService {
/** [매개 변수의 다형성]
* 객체가 가지고 있는 필드 정보 출력
* @param obj : Object 객체를 참조하는 참조 변수
* - Object -> 모든 클래스의 최상위 부모!!
*/
public void printObject(Object obj) {
// Object obj가 참조할 수 있는 객체
// -> Object / Parent / Child
// -> 왜? 다형성 - 업 캐스팅 때문에 참조 가능
System.out.println("----------------------------------");
// 전달 받은 주소의 객체가 Child 객체인 경우
if(obj instanceof Child) {
System.out.println("[Child]");
Child ch = (Child)obj; // obj 다운 캐스팅
// 김 / 50000 / 소나타
System.out.printf("%s / %s /%s \n",
ch.getLastName(), ch.getMoney(), ch.getCar());
}
// 전달 받은 주소의 객체가 Parent 객체인 경우
else if(obj instanceof Parent) {
System.out.println("[Parent]");
Parent p = (Parent)obj; // Parent로 다운 캐스팅
System.out.printf("%s / %s \n",
p.getLastName(), p.getMoney());
}
// 전달 받은 주소의 객체가 Object 객체인 경우
else {
System.out.println("[Object는 필드 없음]");
}
System.out.println("----------------------------------");
}
/**
* 매개 변수의 다형성 테스트
*/
public void test1() {
Object o = new Object();
Parent p = new Parent("홍", 100);
Child c = new Child("박", 333, "모닝");
printObject(o);
printObject(p);
printObject(c);
// -> 매개 변수의 다형성이 적용되지 않았다면
// 각 자료형 별로 매개 변수를 전달 받는 메서드를
// 계속 오버로딩 해야하는 문제 발생!!
#결과

#예제2
| 전달 받은 값에 따라 알맞은 객체를 만들어서 반환하는 메서드 |
[Service]
/**
* 전달 받은 값에 따라 알맞은 객체를 만들어서 반환하는 메서드
* @param num : 1 - Object / 2 - Parent / 3- Child
* @return 생성된 객체 반환
*/
public Object getInstance(int num) {
if(num == 1) return new Object();
// 생성된 객체 타입 : Object
// 주소 : 0x100
if(num == 2) return new Parent();
// 생성된 객체 타입 : Parent
// 주소 : 0x200
return new Child();
// 생성된 객체 타입 : Child
// 주소 : 0x300
}
public void test2() {
Object o1 = getInstance(1); // Object 객체, 0x100
// 부모 참조변수 = 자식 객체 -> 업 캐스팅 적용
Object o2 = getInstance(2); // Parent 객체, 0x200
Object o3 = getInstance(3); // Child 객체, 0x300
// 매개 변수의 다형성 적용 확인 메서드 호출
printObject(o1);
printObject(o2);
printObject(o3);
}
#결과

'BackEnd > Java' 카테고리의 다른 글
| [Java]다형성(Polymorphism) 바인딩 (0) | 2024.07.31 |
|---|---|
| [Java]반환형의 다형성(Polymorphism) (0) | 2024.07.30 |
| [Java]OOP 메서드(method) (0) | 2024.07.25 |
| [Java]OOP Static (0) | 2024.07.23 |
| [Java]OOP_필드(Field) (1) | 2024.07.23 |