다운 캐스팅과 instanceof
하위클래스에서 상위클래스로 업캐스팅 – 묵시적으로 형변환 된다.
다시 원래되로 돌아오는게 다운캐스팅 이라 부른다
반환타입이 상위클래스 경우 자기 형으로 돌아와야 모든 메소드를 사용할수있으니까
하위 클래스로 형변환 , 다운 캐스팅
묵시적으로 상위 클래스 형변환된 인스턴스가 원래 자료형(하위클래스)으로 변환되어야 할 때 다운 캐스팅 이라 한다.
하위 클래스로의 형변환은 명시적으로 되어야 한다.
Customer vc = new VIPCustomer(); // 묵시적 형변환
VIPCustomer vCustomer = (VIPCustomer) vc; // 명시적 형변환
명시적으로 VIPCustomer 이라고 알려줘야 한다 이것이 명시적 형변환
Customer vc = new VIPCustomer();
VIPCustomer vc2 = (VIPCustomer) vc;
package polymorphism;
import java.util.ArrayList;
class Animal3 {
public void move() {
System.out.println("동물이 걷습니다.");
}
public void eating() {
}
}
class Tiger3 extends Animal3 {
@Override
public void move() {
System.out.println("네 발로 걷습니다.");
}
public void hunting() {
System.out.println("발톱으로 사냥을 합니다.");
}
}
class Eagle3 extends Animal3 {
@Override
public void move() {
System.out.println("날아다닙니다.");
}
public void hunting() {
System.out.println("날아다니며 사냥합니다.");
}
}
class Human3 extends Animal3 {
@Override
public void move() {
System.out.println("두발로 걷습니다.");
}
}
public class AnimalTest3 {
public static void main(String[] args) {
Animal3 t = new Tiger3(); // 업캐스팅 묵시적
Animal3 e = new Eagle3();
Animal3 h = new Human3();
Tiger3 t2 = (Tiger3) t; // 명시적 다운캐스팅
Eagle3 e2 = (Eagle3) e;
Human3 h2 = (Human3) h;
t2.hunting(); //
e2.hunting();
System.out.println("=================================================");
ArrayList<Animal3> animal3 = new ArrayList<Animal3>();
animal3.add(t);
animal3.add(e);
animal3.add(h);
AnimalTest3 test = new AnimalTest3();
test.testDownCasting(animal3);
/*
for(Animal3 animal : animal3) { // 클래스명 객체 : 배열객체명
animal.move();
}*/
System.out.println("====================================================");
}
public void moveAnimal3 (Animal3 animal4) {
animal4.move();
System.out.println("===================================================");
}
public void testDownCasting(ArrayList<Animal3> list2) {
for(int i = 0; i < list2.size(); i++) {
Animal3 animal3 = list2.get(i);
// 다운캐스팅이 불릴것이다. 명시적으로 불러야 한다.
if(animal3 instanceof Human3) {
Human3 human = (Human3) animal3;
} else if (animal3 instanceof Tiger3) {
Tiger3 tiger = (Tiger3) animal3;
tiger.hunting();
} else if (animal3 instanceof Eagle3) {
Eagle3 eagle = (Eagle3) animal3;
eagle.hunting();
}
}
}
}
'JAVA Programming' 카테고리의 다른 글
[40] 추상클래스를 이용한 템플릿 메소드 , final static 상수 (0) | 2020.07.16 |
---|---|
[39] 추상 클래스 abstract class , 상속 하위클래스 구현 (0) | 2020.07.16 |
[36] 다형성 (Polymorphism) 이란 ? (0) | 2020.07.15 |
[35] 메소드 오버라이딩 , 업캐스팅되면 과연어떤게 호출? 가상테이블 (0) | 2020.07.15 |
[34] 상속에서의 묵시적 형변환 ( 업캐스팅 ) (0) | 2020.07.15 |