BackEnd/Java

[Java]다형성 객체 타입에 따른 업/다운 캐스팅

Hojung7 2024. 7. 31. 06:25

instanceof 연산자

 참조변수명 instanceof 클래스명

 

참조하고 있는 객체가 클래스명 객체가 맞는 지 확인 (true / false)

 

<주의 사항>

 - instanceof는 참조하고 있는 객체가 상속하고있는 객체도 같이 확인하기 때문에

 

 자식 객체를 참조하는 변수에 부모 타입을 검사하면 true가 나온다!!

 

ex)

 Parent p = new Child(); // 업 캐스팅

 p instanceof Child

 -> p가 참조하는 객체가 Child야? true

p instanceof Parent

-> p가 참조하는 객체가 Parent야? true 주의 사항을 잘 이용하면

 

Parent, Child 클래스 상속 관계가 맞는지 확인하는 용도로도 사용 가능!

 

 

Object 

모든 클래스(객체)의 최상위 부모

	Object[] arr = new Object[3];
						// Object 참조 변수 3개 묶음

 

* Object 참조변수 = Parent / Child/ Object

arr[0] = new Parent(); // Parent -> Object로 업 캐스팅
arr[1] = new Child();  // Child  -> Object로 업 캐스팅
arr[2] = new Object(); // 같은 자료형 연산

 

<향상된 for문1>

for(Object obj : arr) {
			/* tip. 자료형을 연달아 검사하는 경우 
			 * 마지막 자식 자료형부터 검사하는게 좋다!!!
			 * */
			
			
			// 얻어온 요소가 Child  타입이면
			if(obj instanceof Child) {
				System.out.println("Child 입니다");
			}
			
			// 얻어온 요소가 Parent 타입이면
			else if(obj instanceof Parent) {
				System.out.println("Parent 입니다");
			}
			
			// 얻어온 요소가 Object 타입이면
			else {
				System.out.println("Object 입니다");
			}
			
		}

#결과

 

<향상된 for문2>

	System.out.println("[부모 -> 자식 역순 검사 문제점]");
		
		for(Object obj : arr) {
			// 얻어온 요소가 Object  타입이면
			if(obj instanceof Object) {
				System.out.println("Object 입니다");
			}
			
			// 얻어온 요소가 Parent 타입이면
			else if(obj instanceof Parent) {
				System.out.println("Parent 입니다");
			}
			
			// 얻어온 요소가 Child 타입이면
			else {
				System.out.println("Child 입니다");
			}
		}

#결과

 

'BackEnd > Java' 카테고리의 다른 글

[Java]다형성 추상클래스  (0) 2024.07.31
[Java]객체 배열(Object_Array)  (0) 2024.07.31
[Java]다형성 (Polymorphism)  (0) 2024.07.31
[Java]상속(Inheritance) final 클래스  (0) 2024.07.31
[Java]상속(Inheritance) 오버라이딩  (0) 2024.07.31