A sentimental robot

다운캐스팅, Downcasting 본문

Java

다운캐스팅, Downcasting

GOD03219 2018. 1. 9. 11:27


public class Day3 {

 public static void main(String[] args) {

  class Apple {
   void func02() {
    System.out.println("Apple's func02");
   }
  }

  class Banana extends Apple {
   void func01() {
    System.out.println("Banana's func01");
   }
  }
  class Orange extends Apple {
   void func01() {
    System.out.println("Orange's func01");
   }
  }

  Apple apple = new Banana();
  apple.func02();

  // apple이 자식 Banana클래스 안의 func01를 쓰고 싶을 때! -> Downcasting
  Banana banana = (Banana) apple;
  banana.func01();
  banana.func02();

  Orange org = new Orange();
  org = (Orange) apple; // ClassCastException

 }

}

// 이미 부모 클래스인 Apple 타입으로 Upcasting 되어 있으면 자식클래스(Banana)에 접근할 수가 없다. 자식클래스의 고유의 메소드에 접근하고자 할 때 Downcasting을 사용한다.

 


 

class Apple {
 void f0() {
  System.out.println("0");
 }
}

class Banana extends Apple {
 void f1() {
  System.out.println("1");
 }
}

class Orange extends Apple {
 void f2() {
  System.out.println("2");
 }
}

class In {
 void f3(Apple a) {

  if (a instanceof Apple) {
   Apple aa = (Apple) a;
   a.f0();
  }
  if (a instanceof Banana) {
   Banana b = (Banana) a;  // Downcasting
   b.f1();
  }
  if (a instanceof Orange) {
   Orange org = (Orange) a;
   org.f2();
  }
 }
}

public class Day3 {

 public static void main(String[] args) {
  Apple a = new Apple();
  Banana b = new Banana();
  Orange org = new Orange();
  In d = new In();
  d.f3(b);  // Upcasting

 }

}

 

'Java' 카테고리의 다른 글

진수에 대해서  (0) 2018.01.09
객체참조  (0) 2018.01.09
예외처리, try~catch  (0) 2018.01.09
자바에서 대표적인 예외  (0) 2018.01.09
우주에서 랜덤하게 살아남기  (0) 2018.01.08