자바 - 다운캐스팅 ( downCasting )

빵제이·2023년 7월 25일
0

자바

목록 보기
24/37

[ 다운 캐스팅 : downCasting ]

  • 슈퍼 클래스 타입을 서브 클래스 타입으로 변경(다운캐스팅)
    => 업캐스팅과 반대. ( Object 클래스를 사용할 때 다운캐스팅을 많이 사용함 )

[ 메인 메서드 ]

public class MainWrapper {

  public static void ex01() {
    Person p = new Student();
    p.eat();
    p.sleep();
    ((Student)p).study();  // 슈퍼 클래스 타입 -> 서브 클래스 타입으로 변경(다운캐스팅)
    ((Worker)p).work();    // 잘못된 캐스팅을 막고 싶다!    
  }
  
  public static void ex02() {
    
	Person p = new Student();
    System.out.println(p instanceof Person);  // p가 Person  타입이면 true, 아니면 false
    System.out.println(p instanceof Student); // p가 Student 타입이면 true, 아니면 false
    System.out.println(p instanceof Worker);  // p가 Worker  타입이면 true, 아니면 false
    
  }
  
  public static void ex03() {
    
	Person p1 = new Student();
    if(p1 instanceof Student) {
      ((Student) p1).study();     // p1. 찍고 study()를 고르면 이클립스에서 자동으로 다운캐스팅 해준다.
    }
    
	Person p2 = new Worker();
    if(p2 instanceof Worker) {
      ((Worker) p2).work();
    }
    
  }
  
  public static void main(String[] args) {
    ex02();
  }
}

[ 사람 클래스 ]

public class Person {
  
  public void eat() {
    System.out.println("냠냠");
  }
  
  public void sleep() {
    System.out.println("쿨쿨");
  }
}

[ 학생 클래스 ]

public class Student extends Person {

  public void study() {
    System.out.println("공부");
  }
}


[ 직장인 클래스 ]

public class Worker extends Person {

  public void work() {
    System.out.println("일함");
  }
  
}
profile
개인 아카이브

0개의 댓글