Back-End/JAVA

[Java] Casting(Upcasting, Downcasting), instanceof

챌링킴 2021. 5. 27. 15:14
반응형

1) 업 캐스팅(Up Casting)
부모 타입의 객체에 자식 생성자를 호출
부모 타입의 객체에 자식 클래스의 필드 주소값을 담아주는 것
업 캐스팅된 객체는 자식 클래스에서 추가된 내용을 사용할 수 없다.

부모 필드의 내용만 사용 가능하다.
단, 오버라이딩 된 메소드는 사용 가능하다.

부모클래스 객체명 = new 자식생성자();

package zoo;

public class Ground {
	public static void main(String[] args) {
//		Dog jindo = new Dog("백구", "수컷", 21);
//		Hamster panda = new Hamster("햄토리", "암컷", 18);
//		jindo.makeSomeNoise();
//		panda.makeSomeNoise();
//		jindo.move();
//		panda.move();
		
		//객체들의 규칙성이 없으므로 업캐스팅을 이용하여 배열로 만들어서 사용 
		Animal[] animals = {	
				new Dog("백구", "수컷", 21),
				new Hamster("햄토리", "암컷", 18)
		};
		for (int i = 0; i < animals.length; i++) {
			animals[i].makeSomeNoise();
		}
	}
}


2) 다운 캐스팅(Down Casting)
업 캐스팅 된 객체를 자식 객체에 담는 기법
업 캐스팅 된 객체에 다시 자식 클래스의 필드를 담아주는 것
업 캐스팅시 잘려나갔던 자식 클래스의 내용들을 다시 사용할 수 있게 하려면

자식 클래스의 타입으로 바꿔주어야 한다.

(자식클래스)업캐스팅된 객체

		//형변환연산자는 . 보다 더 나중에 연산하게 되므로
		//괄호로 먼저 다운캐스팅을 진행해 주고 그 다음에 .를 진행해야 한다.
		((Dog)animals[0]).playWithBone();

		//다운캐스팅은 매번마다 하기 힘드므로 보통 그 타입의 객체에다 담아놓고 사용한다.
		Dog jindo = (Dog)animals[0];
		jindo.playWithBone();


3) instanceof
객체 instanceof 클래스명 : 객체가 뒤에오는 클래스 타입인지 비교
true/false로 나오는 조건식

부모객체 instanceof 부모클래스 : true
자식객체 instanceof 자식클래스 : true
부모객체 instanceof 자식클래스 : false
자식객체 instanceof 부모클래스 : true
업캐스팅객체 instanceof 부모클래스 : true
업캐스팅객체 instanceof 자식클래스 : true

		System.out.println("==========================================");
		for (int i = 0; i < animals.length; i++) {
			if(animals[i] instanceof Dog) {
				((Dog)animals[i]).playWithBone();
			}else if(animals[i] instanceof Hamster) {
				((Hamster)animals[i]).storeSeed();
			}
		}
반응형

'Back-End > JAVA' 카테고리의 다른 글

[Java] 추상 클래스(abstract)  (0) 2021.05.27
[Java] 접근 권한 제어자(접근제어자)  (0) 2021.05.27
[Java] 상속(inheritance)  (0) 2021.05.27
[Java] Static  (0) 2021.05.24
[Java] 클래스 배열  (0) 2021.05.24