반응형
# 다형성 활용
## 다형성 이론의 전제조건 (부모 클래스 활용)
- 상속관계가 전제되어야 한다.
- 객체 생성 시 UpCasting으로 하기. (상위 클래스가 하위 클래스에 메시지를 보내야 하니까)
UpCasting 이 되면 DownCasting 을 할수 있다.
// 자동 형 변환 (UpCasting)
// 방법1. Cat cat = new Cat();
// 방법2. Object ani = new Cat();
Animal ani = new Dog(); //방법3.
ani.eat(); // 컴파일시점에서 Animal의 eat() / 실행시점에서는 Dog의 eat()
//ani.night(); // Dog에는 없기때문에 불가능.
((Cat)ani).night(); // 강제 형 변환 (DownCasting)
- 하위 클래스가 반드시 재정의(Override) 해야 한다. (다형성이 보장되기 위함)
- 동적 바인딩을 통해 실현 됨. (동적 바이딩 : 실행 시점에서 사용될메서드가 결정되는 바인딩, 프로그램의 속도를 떨어뜨리는원인이 될 수 있다.)
## 다형성 활용 방법
매개변수를 부모(상위)클래스 타입으로 받게 되면 모든 자식(하위) 클래스를 받을 수 있음.
1. 다형성인수 (데이터 이동)
Dog d = new Dog();
display(d);
Cat c= new Cat();
display(c);
public static void display(Animal r) { // 다형성인수 : Animal(상위클래스)의 모든 하위클래스를 받을 수 있다.
r. eat();
}
2. 다형성 배열(서로 다른 객체를 담을 수 있다.)
Animal[] r = new Animal[2]; // 다형성배열 : 서로 다른 하위 클래스를 담을 수 있다.
r[0] = new Dpg();
r[1] = new Cat();
r[0].eat();
r[1].eat();
## 다형성 활용 (실습)
1. 다형성 인수 (실습)
public class TPC24 {
public static void main(String[] args) {
// 1. 다형성인수
Dog dog = new Dog();
display(dog);
Cat cat = new Cat();
display(cat);
}
/*
* // 메서드 오버로딩(Overloading) private static void display(Dog dog) { // TODO
* Auto-generated method stub
*
* } private static void display(Cat cat) { // TODO Auto-generated method stub
*
* }
*/
// 부모타입을 받는 것으로 해결. (다형성인수)
private static void display(Animal ani) { // 다형성 인수 : Animal (이때 자동으로 UpCasting 됨)
ani.eat();
//ani.night(); // 없으므로 불가능.
if (ani instanceof Cat) { // instanceof : 타입 알아보는 것. ani가 Cat 타입으로부터 만들어졌으면 true 반환.
((Cat)ani).night(); // DownCasting
}
}
}
2. 다형성 배열
public class TPC25 {
public static void main(String[] args) {
// 2. 다형성 배열
// Cat, Dog 타입 저장할 배열 생성.
Animal[] ani = new Animal[2];
ani[0] = new Cat();
ani[1] = new Dog();
// for문 이용.
for (int i = 0; i < ani.length; i++) {
ani[i].eat();
if(ani[i] instanceof Cat) {
((Cat)ani[i]).night();
}
}
// 메서드 이용.
display(ani);
}
private static void display(Animal[] ani) { // 다형성 배열
for (int i = 0; i < ani.length; i++) {
ani[i].eat();
if(ani[i] instanceof Cat) {
((Cat)ani[i]).night();
}
}
}
}
반응형
'인프런 강의 학습 > Java TPC' 카테고리의 다른 글
Java TPC_17일차 Object 클래스 / Object 클래스 활용 (0) | 2022.01.24 |
---|---|
Java TPC_16일차 추상 클래스 / 인터페이스 / 인터페이스(규약)와 JDBC의 관계 / 인터페이스의 상속관계 (0) | 2022.01.23 |
Java TPC_14일차 객체 형 변환 (0) | 2022.01.19 |
Java TPC_13일차 상속관계에서 객체생성 방법 (0) | 2022.01.18 |
Java TPC_12일차 수평적 구조와 수직적 구조 / 상속 / 오버라이드 (0) | 2022.01.17 |