다형성 활용 X
각 클래스 Dog , Cat , Caw를 사용한 코드의 경우 모두 타입이 다르기때문에 배열에 담을수 없음
다형성 활용 O
상속을 사용하면 배열에 담을 수 있게 된다
예시 코드) 상속 사용
package poly.ex2;
public class Animal {
public void sound() {
System.out.println("동물 울음 소리");
}
}
package poly.ex2;
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("멍멍");
}
}
package poly.ex2;
public class Cat extends Animal {
@Override
public void sound() {
System.out.println("냐옹");
}
}
package poly.ex2;
public class Caw extends Animal{
@Override
public void sound() {
System.out.println("음매");
}
}
package poly.ex2;
public class AnimalPolyMain1 {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
Caw caw = new Caw();
soundAnimal(dog);
soundAnimal(cat);
soundAnimal(caw);
}
//동물이 추가 되어도 변하지 않는 코드
private static void soundAnimal(Animal animal) { //부모는 자식을 담을수 있
System.out.println("동물 소리 테스트 시작");
animal.sound() //받은 형태로 메서드 호출
System.out.println("동물 소리 테스트 종료");
}
}
<실행 결과> 동물 소리 테스트 시작 멍멍 동물 소리 테스트 종료 동물 소리 테스트 시작 냐옹 동물 소리 테스트 종료 동물 소리 테스트 시작 음매 동물 소리 테스트 종료

Dog을 예시로 들어보면, 인스트는 자식(Dog)으로 생성(부모, 자식 공간 모두 있음)
soundAnimal(Animal animal) 을 호출할때는 부모로 형변환해서 호출함.
우선적으로 메서드를 실행 할때는 부모의 sound()가 호출되는게 맞지만
오버라이딩 된 메서드가 항상 우선권을 가짐. 그래서Dog 의 sound()가 호출이 됨.
예시코드) for과 배열로 중복제거하기
package poly.ex2;
public class AnimalPolyMain2 {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
Caw caw = new Caw();
Animal[] animalArr = {dog, cat, caw}; //모두 동일대상 상속받음= 배열 사용가능
//Animal[] animalArr = {new Dog(), new Cat(), new Caw()}; //위랑 동일한 결
//변하지 않는 부분
for (Animal animal : animalArr) {
System.out.println("동물 소리 테스트 시작");
animal.sound();
System.out.println("동물 소리 테스트 종료");
}
}
}
남은문제