TIL - 업 캐스팅과 다운 캐스팅

장숭혁·2023년 10월 17일
0

TIL작성

목록 보기
1/60

짧고 점진적이며 작은 정보를 일관성 있게 배운다.

업캐스팅 : 부모 parent = new 자식();

다운 캐스팅 : 자식클래스 명칭을 표시해야 된다. 자식 child = (자식)Parent;

 업 캐스팅의 경우 부모 클래스의 parent 객체는 자식클래스에서 오버라이딩된 메소드를 쓸 수 있다. 반면, 자식클래스에서 새롭게 정의된 메소드는 사용하지 못한다.

package upcasting;

class Parent {

    int money = 100000000;

    String husband = "husband";

    Parent() {

    }

    void sound() {

        System.out.println("부모 : 밥 먹고 가렴~");

    }

    void behavior1() {

        System.out.println("부모 : 트로트 듣기");

    }

}

class Child extends Parent {

    int money = 0;
    String friend = "friend";

    Child() {

    }

    @Override
    void sound() {

        System.out.println("자식 : 간헐적 단식 중 이예요~");

    }

    void behavior2() {

        System.out.println("자식 : 학교 가기");

    }

}

public class Main {

    public static void main(String[] args) {

        Parent parent = new Child();//업캐스팅

        parent.behavior1();//부모 클래스에서 메소드 호출 가능
        parent.behavior2();//자식 클래스에서 메소드 호출 "불"가능 ,에러 발생
        System.out.println(parent.friend);//자식 필드를 이용할 수 없음, 에러발생
        
        parent.sound();//자식에서 오버라이딩 된 메소드가 결과로 나옴

        System.out.println(parent.money);//부모 클래스의 필드 값이 나옴

        Child child = (Child) parent;//다운 캐스팅

        child.sound();//자식 메소드가 나옴

        child.behavior1();//부모 메소드 사용가능

        child.behavior2();//자식 메소드 사용가능

        System.out.println(child.husband);//부모 husband 출력

        System.out.println(child.money);//자식 클래스의 필드 값이 나옴

    }

}

  parent객체는 child 자식 클래스의 behavior2()를 사용하지 못한다. 또한 friend 필드를 사용하지 못한다.
  child객체는 부모 클래스의 필드와 메소드를 사용할 수 있다.

  참고로 부모 클래스와 자식클래스가 같은 이름의 메소드가 존재한다면 @override라는 어노테이션을 주지 않아도 자동으로 오버라이딩된다.

profile
코딩 기록

0개의 댓글

관련 채용 정보