IT Knowledge/Design Pattern
객체 지향 -2. 다형성(상속)
RoarinGom
2021. 11. 10. 22:58
- 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
- 같은 코드에서 여러 다른 실행 결과가 나옴
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
- 다형성을 활용하여 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음.
package Basic_Grammar.chap3_OOP.ch03_Polymorphism;
public class AnimalTest {
public void moveAnimal(Animal animal){
animal.move();
}
public static void main(String[] args) {
Animal hAnimal=new Human();
Animal tAnimal=new Tiger();
Animal eAnimal=new Eagle();
AnimalTest test=new AnimalTest();
test.moveAnimal(hAnimal);
test.moveAnimal(tAnimal);
test.moveAnimal(eAnimal);
}
}
-상위 클래스를 이용하여 하위클래스를 handling한다.
Animal 클래스 (상위 클래스)
move()
위의 예시 처럼 Animal(상위 클래스)로 객체타입을 지정하여 생성하면, Animal이 가진 move() 메서드(overriding)는 사용할 수 있으나,
Human, Tiger, Eager이 가진 개별적인 메서드(오버라이딩하지않고 만들어진)는 사용을 못한다.
사용하기 위해서는 각각 하위 클래스는 다운 캐스팅을 해야지 사용할 수 있다.
Animal
package Basic_Grammar.chap3_OOP.ch03_Polymorphism;
public class Animal {
public void move(){
System.out.println("동물이 움직인다.");
}
}
Human
package Basic_Grammar.chap3_OOP.ch03_Polymorphism;
public class Human extends Animal{
@Override
public void move() {
System.out.println("사람이 두 발로 걷습니다.");
}
public void readBook(){
System.out.println("사람이 책을 읽습니다.");
}
}
Tiger
package Basic_Grammar.chap3_OOP.ch03_Polymorphism;
public class Tiger extends Animal{
@Override
public void move() {
System.out.println("호랑이가 네 발로 뜁니다.");
}
public void hunting(){
System.out.println("호랑이가 사냥을 합니다.");
}
}
Eagle
package Basic_Grammar.chap3_OOP.ch03_Polymorphism;
public class Eagle extends Animal{
@Override
public void move() {
System.out.println("독수리가 하늘을 날아 다닙니다.");
}
public void flying(){
System.out.println("독수리가 양 날개를 쭉 펴고 날아 다닙니다.");
}
}
각각의 다른 Human, Tiger, Eagle을 배열에 넣고 싶을 땐,
ArrayList<Animal> animals=new ArrayList<>(); 로 넣어준다.
package Basic_Grammar.chap3_OOP.ch03_Polymorphism;
import java.util.ArrayList;
public class AnimalTest {
public static void main(String[] args) {
Animal hAnimal=new Human();
Animal tAnimal=new Tiger();
Animal eAnimal=new Eagle();
ArrayList<Animal> animals=new ArrayList<>();
animals.add(hAnimal);
animals.add(tAnimal);
animals.add(eAnimal);
for (Animal animal:animals){
animal.move();
}
}
}