[Java] 업 캐스팅과 다운 캐스팅

DEVELOPERS_Ivan ㅣ 2024. 3. 15. 10:00

목차
- Q1_업 캐스팅이란?
- Q2_다운 캐스팅이란?

- Q1_업 캐스팅이란?

더보기

A. UpCasting : 다형성을 이용하여 자식 클래스의 객체를 부모 클래스 타입의 참조 변수를 참조 할 수 있게 하는 것.

 

- 상위(부모) 클래스 : 

class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
} // end of calss

 

- 하위(자식) 클래스 : 

class Dog extends Animal {
    public void bark() {
        System.out.println("Dog barks");
    }
} // end of class

 

- Main 클래스 : 

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog(); // 자식 클래스인 Dog의 객체 생성

        // 업캐스팅: Dog(자식 클래스) 객체를 Animal(부모 클래스) 타입의 변수로 참조
        Animal animal = dog;

        animal.eat();  // Animal 클래스에 정의된 메서드 호출 가능
        // animal.bark();  // Dog 클래스의 메서드이므로 Animal 타입으로 참조될 때 호출 불가능
    } // end of min
} // end of class

 

- Q2_다운 캐스팅이란?

더보기

A. DownCasting : 부모 클래스의 참조를 자식 클래스의 참조로 변환하는 것.
 - 업 캐스팅 된 경우 자식 클래스의 멤버 변수나 메서드에 접근할 수 없기 때문에 자식 클래스로 다운 캐스팅해서 사용해야 합니다.

 

상위(부모) 클래스 : 

class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
} // end of calss
 
- 하위(자식) 클래스 : 

class Dog extends Animal {
    public void bark() {
        System.out.println("Dog barks");
    }
} // end of class

 

- 하위(자식) 클래스 : 

class Dog extends Animal {
    public void bark() {
        System.out.println("Dog barks");
    }
} // end of class

 

- Main 클래스 : " instnceof " 연산자를 사용하여 안전하게  " Dog " 타입으로 다운캐스팅할 수 있으며, 이렇게 변환된 " Dog "  변수를   통해 " Dog "클래스의 " bark " 메서드에 접근 할 수 있습니다.

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog(); // 업캐스팅

        // 다운캐스팅 전에 instanceof를 사용하여 확인
        if (animal instanceof Dog) {
            Dog dog = (Dog) animal; // 다운캐스팅
            dog.bark();  // 이제 자식 클래스의 메서드에 접근하여 bark 메서드를 호출 할 수 있음
        }
    } // end of min
} // end of class