반응형
DOWN CASTING
상위 클래스 Animal
public class Animal {
private String name;
public void cry() {
System.out.println(name + "가 소리를 낸다.");
}
// Getter/Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
하위클래스 Dog
public class Dog extends Animal {
// private String name
// Animal 클래스의 함수도 모두 상속받는다.
@Override
public void cry() {
// TODO Auto-generated method stub
super.cry();
System.out.println("멍멍멍~~~");
}
public void run() {
System.out.println(getName() + "가 뛴다!!");
}
}
하위클래스 Cat
public class Cat extends Animal {
// private String name
// Animal 클래스의 함수도 모두 상속받는다.
@Override
public void cry() {
// TODO Auto-generated method stub
super.cry();
System.out.println("냥냥~~");
}
public void grooming() {
System.out.println("그루밍 한다.");
}
}
DownCasting을 실행하기위한 클래스
(상위클래스를 extends 하지 않는다.)
public class AnimalAction {
// Animal 클래스를 함수의 파라미터로 쓸 수 있다.
// 즉, Animal 클래스의 객체가 올 수 있다.
// 함수의 파라미터를 최상위 클래스로 받아오면
// 객체를 animal로 인식하기때문에 다 받아올 수 있다.
// Animal animal = new Dog();
// Animal animal = new Cat();
void action(Animal animal) {
animal.cry();
// DownCasting이란 상속받은 자식클래스로 캐스팅하는 것. (상속관계이어야만 함)
// animal의 instance(객체가 Heap 메모리에 올라온 상태)가
// Dog면 Dog로바꾸고 run() 함수를 실행
// Cat이면 Cat으로 바꾸고 grooming을 실행해라.
if(animal instanceof Dog) {
((Dog)animal).run();
} else if(animal instanceof Cat) {
((Cat)animal).grooming();
}
}
}
실행할 main 클래스
public class AnimalAction {
// Animal 클래스를 함수의 파라미터로 쓸 수 있다.
// 즉, Animal 클래스의 객체가 올 수 있다.
// 함수의 파라미터를 최상위 클래스로 받아오면
// 객체를 animal로 인식하기때문에 다 받아올 수 있다.
// Animal animal = new Dog();
// Animal animal = new Cat();
void action(Animal animal) {
animal.cry();
// DownCasting이란 상속받은 자식클래스로 캐스팅하는 것. (상속관계이어야만 함)
// animal의 instance(객체가 Heap 메모리에 올라온 상태)가
// Dog면 Dog로바꾸고 run() 함수를 실행
// Cat이면 Cat으로 바꾸고 grooming을 실행해라.
if(animal instanceof Dog) {
((Dog)animal).run();
} else if(animal instanceof Cat) {
((Cat)animal).grooming();
}
}
}

반응형
'Language > JAVA' 카테고리의 다른 글
| JAVA - Interface (0) | 2022.07.06 |
|---|---|
| JAVA - Abstract (추상클래스) (0) | 2022.07.06 |
| JAVA - Up Casting (0) | 2022.07.05 |
| JAVA - 부모(상위)생성자 호출을 위한 super 사용법 (0) | 2022.07.05 |
| JAVA - EXTENDS (상속) (0) | 2022.07.04 |