다운캐스팅은 상속받은 자식클래스로 캐스팅하는것이다.
# 자식 클래스로 캐스팅하는것은 실제 메모리의 객체로 바꾸는것이다.
먼저 부모클래스가 되는 Animal 클래스를 만든다.
public class Animal {
private String name;
public void cry() {
System.out.println(name+"(은)는 소리를 낸다.");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
그 후 Animal 클래스를 상속받는 Dog 클래스를 만들어준다.
public class Dog extends Animal {
// String name;
// Animal 클래스의 함수를 상속받았다.
@Override
public void cry() {
// TODO Auto-generated method stub
super.cry();
System.out.println("멍멍왈왈월월");
}
public void run() {
System.out.println(getName()+"(이)가 뛴다.");
}
}
또 Animal 클래스를 상속받는 Cat 클래스를 만들어준다.
public class Cat extends Animal {
// String name;
// Animal 클래스의 함수를 상속받았다.
@Override
public void cry() {
// TODO Auto-generated method stub
super.cry();
System.out.println("야옹");
}
void grooming() {
System.out.println(getName()+"(은)는 그루밍 한다.");
}
}
그 후 AnimalAction을 만들고 다운캐스팅 한다.
public class AnimalAction {
// Animal 클래스의 객체가 온다.
// 함수의 파라미터로 최상위 클래스로 받아주는데 오면 넘겨줄수있다.
void action(Animal animal) {
animal.cry();
// Animal의 인스턴스 (클래스가 heap메모리에 올라온 상태(객체))가 개일때
if (animal instanceof Dog) {
((Dog)animal).run();
} else if (animal instanceof Cat) {
((Cat)animal).grooming();
}
}
}
# action 함수를 만들때 (Animal animal) 으로 부모클래스를 캐스팅하여 업캐스팅 해준다. ( Animal animal = new Dog() 과 비슷한 원리다.)
# if문과 instanceof를 활용하여 다운캐스팅한다.
# instanceof는 어떤 객체일때를 정해주는것이다.
메인 클래스에서 확인해보자.
in:
public class AnimalMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
AnimalAction aa = new AnimalAction();
Dog d = new Dog();
d.setName("바둑이");
aa.action(d);
System.out.println("---------------");
Cat c = new Cat();
c.setName("나비");
aa.action(c);
}
}
out:
# action 함수에서 자식클래스를 받을때마다 각각 다르게 출력된다.
'Java' 카테고리의 다른 글
[Java] 인터페이스(Interface) (0) | 2022.07.06 |
---|---|
[Java] 추상(Abstract) (0) | 2022.07.06 |
[Java] 업캐스팅(Upcasting) (0) | 2022.07.05 |
[Java] 상속과 메소드 오버라이딩(Method Overriding), super (0) | 2022.07.04 |
[Java] 멤버변수 저장하기, 가져오기 : setter, getter (0) | 2022.07.04 |
댓글