반응형
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 |