ID_DI
DI's study notes
ID_DI
전체 방문자
오늘
어제
  • 분류 전체보기 (85)
    • Deep-Learning (3)
      • CNN (2)
      • NLP (1)
    • Data_Python (6)
      • Numpy (0)
      • Matplotlib (4)
    • Python (8)
      • Python Algorithm (6)
    • Java (36)
      • Java(base) (33)
      • Java practice(base) (2)
    • Git (12)
    • Algorithm (7)
    • etc (7)
    • linux (1)
    • DeskSetup (0)
    • TIL_모각코 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • java.lang
  • 파이썬
  • Python
  • java
  • staged
  • 정렬
  • string to int
  • git add.
  • java 기초
  • matplotlib
  • git
  • Github
  • binarySearch
  • README.md
  • 합병정렬
  • 자바
  • 커밋
  • 알고리즘
  • java base
  • java.net

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ID_DI

DI's study notes

[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof
Java/Java(base)

[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof

2021. 11. 30. 01:58
전제조건: 상속의 관계에 있어어야 함

Up casting (업캐스팅)

  • 부모 타입의 객체에 자식 클래스의 필드를 담아주는 것
  • 부모 타입의 객체에 자식 생성자를 호출
  • 필드의 사용 범위가 부모타입만큼 제한 되기 때문에 자식 클래스에서 추가된 내용은 사용할 수 없다. 단, 오버라이딩 된 메소드는 사용가능
    • 자식필드는 존재하지만, 사용불가능인 개념
부모클래스 객체명 = new 자식생성자();
Car mycar = new SuperCar();

Down casting (다운캐스팅)

  • 업 캐스팅 된 객체를 다시 자식타입으로 바꾸는 기법
    • 업캐스팅이 되지 않은 객체는 다운캐스팅 불가능
  • 업 캐스팅 된 객체에 다시 자식클래스의 필드를 달아주는 것
  • 업 캐스팅시 잘려나갔던 자식 클래스의 내용들을 다시 사용할 수 있게 하려면 자식 클래스의 타입으로 바꿔주어야한다.
(자식클래스)업캐스팅된 객체
자식 클래스 객체 = (자식클래스)업캐스팅된 객체;
객체.자식필드

Ex) 객체배열에서의 업캐스팅과 다운캐스팅

Car[] garage = {
                new Car("Avante", "Gray", 2000),
                new SuperCar("Porche", "mint", 20000,"abc"), //업캐스팅: 부모타입(Car)의 객체에 자식 타입(Super)의 객체를 넣었음
                new Car("Genesis", "Gray", 10000)
        }

//garage[2] 는 업캐스팅 됬으므로, SuperCar의 메소드를 사용할 수 없다.
//        garage[2].roofOpen(); 불가능
//        (SuperCar)garage[2].roofOpen(); 다운캐스팅 실패 (하위 연산자`.` 가 형변환 연산자보다 먼저 실행되기 때문에, 다운캐스팅이 뒤늦게 실행되어 불가능)
        ((SuperCar)garage[2]).roofOpen(); //다운캐스팅

        SuperCar downObj = ((SuperCar)garage[2]); //보통 다운캐스팅은 자식타입의 객체에 담아놓고 사용한다.
        downObj.roofClose();

<업캐스팅 다운캐스팅 확인하는 비교>

instanceof

객체 instanceof 클래스명 : 객체 뒤에 오는 클래스의 타입인지 확인 (true, false)

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

Ex) 조건부 다운캐스팅

for(int i = 0; i < garage.length; i++) {
            /*garage[i]은 Car 타입이거나 SuperCar 타입이 업캐스팅 된 채 담겨있을 것이다. 
             * 따라서 하나씩 꺼내와서 비교할 때, Car 타입은 비교하면 false가 나올 것이고, 업캐스팅된 객체를 비교하면  true 가 나올것이다.
             */
            if(garage[i] instanceof SuperCar) {
                SuperCar Obj = (SuperCar) garage[i];
                Obj.roofOpen();
            }

image-20211130005544889

'Java > Java(base)' 카테고리의 다른 글

[Java] 추상클래스 abstract class, final  (0) 2021.12.01
[Java]접근 권한 제어자 public, private, protected, default / getter, setter  (0) 2021.11.30
[Java] static (정적) : 모든 객체가 공유  (0) 2021.11.29
[Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩)  (0) 2021.11.29
[Java] 상속(inheritance), 자식클래스 생성자, super()  (0) 2021.11.29
    'Java/Java(base)' 카테고리의 다른 글
    • [Java] 추상클래스 abstract class, final
    • [Java]접근 권한 제어자 public, private, protected, default / getter, setter
    • [Java] static (정적) : 모든 객체가 공유
    • [Java] 다형성 Polymorphism : Overloading(오버로딩), Overriding(오버라이딩)
    ID_DI
    ID_DI
    Computer Vision

    티스토리툴바