Java 9일차 1(업캐스팅 다운캐스팅)

2022. 11. 22. 09:50코딩배움일지/JAVA

업캐스팅

 

업캐스팅이란 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것을 말한다

 업캐스팅 되면 자식클래스가 가진 고유 영역을 쓸 수 없다. (오버라이딩 된것 빼고)부모 가지고 있는 것은 참조 할 수 있다.

 

다운캐스팅

 

업캐스팅과 반대로 캐스팅 하는 것을 다운캐스팅이라고 한다. 업캐스팅된 것을 다시 원상태로 돌리는 것을 말한다. 하위 클래스로의 다운캐스팅을 할때는 타입을 명시적으로 지정해줘야한다는 특징이 있다.

 

instanceof =(업캐스팅 된 클래스) 원래 자료형은 무엇이었니 라고 물어 보는 것. 

 

java 는 여러개를 상속 받을 수 없다(다중상속 ㄴㄴ)

interface (다중 구현은 가능) 다음시간에...

public class AnimalMain2 {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Human human = new Human();
        Tiger tiger = new Tiger();

        Animal hAnimal = human; /*형변환*/ /*업캐스팅*/
        Animal tAnimal = tiger;
        Animal [] animals = new Animal[5]; /*3개의 우리*/
        animals[0] = new Human();
        animals[1] = new Tiger();
        animals[2] = new Human();
        animals[3] = new Tiger();
        animals[4] = new Human();

        System.out.println("[업캐스팅]");
        for (int i =0; i < animals.length; i++){ /* animals[1] = new Tiger(); 재정의 된거만 쓰자.*/
            animals[i].move(); /*업캐스팅*/
        }

        System.out.println();

        System.out.println("[다운캐스팅]");
        for (int i =0; i < animals.length; i++) {
            if(animals[i] instanceof Human){ /*Human 으로 생성된 객체가 true 면 작동. 아니면 빠잉*/
                ((Human) animals[i]).readBooks(); /*다운캐스팅*/ /*명시해줘야 한다.*/
                
            } else if (animals[i] instanceof Tiger) {
                ((Tiger) animals[i]).hunting();
            
            }
        }
        //int a = (int)3.14; /*다운캐스팅*/
        //double d = (double)3; /*업캐스팅*/
    }
}
Animal 객체 생성
Animal 객체 생성
Human 객체 생성
Animal 객체 생성
Tiger 객체 생성
Animal 객체 생성
Human 객체 생성
Animal 객체 생성
Tiger 객체 생성
Animal 객체 생성
Human 객체 생성
Animal 객체 생성
Tiger 객체 생성
Animal 객체 생성
Human 객체 생성

[업캐스팅]
사람이 두 발로 걷습니다.
호랑이가 네 발로 뜁니다.
사람이 두 발로 걷습니다.
호랑이가 네 발로 뜁니다.
사람이 두 발로 걷습니다.

[다운캐스팅]
사람이 책을 읽습니다.
호랑이가 사냥을 합니다.
사람이 책을 읽습니다.
호랑이가 사냥을 합니다.
사람이 책을 읽습니다.

Process finished with exit code 0

'코딩배움일지 > JAVA' 카테고리의 다른 글

Java 9일차 3  (0) 2022.11.22
Java9일차 2(추상)  (0) 2022.11.22
Java 8일차 4(다운캐스팅)  (0) 2022.11.21
Java 8일차 3(업캐스팅)  (0) 2022.11.21
Java 8일차 2(상속, overiding)  (0) 2022.11.21