Java 다형성 - 인터페이스 활용

지금까지 배웠던 다형성을 이용하여 활용해보도록 한다.
다음 주어진 그림을 보고 구현한다.

  • AbsAnimal 추상 클래스이다.
    • sound() 동물의 울음 소리를 추상 메소드로 제공한다.
    • move() 추상 메소드가 아닌 상속을 목적으로 사용한다.
  • Fly 인터페이스로 정의되어 있다.
    • Bird 날 수 있도록 fly 메소드를 구현한다.

예제 코드

코드를 작성하여 실행 결과를 살펴보자

AbsAnimal.java

package diamond;

public abstract class AbsAnimal {
    public abstract void sound();

    public void move() {
        System.out.println("걷기");
    }
}

Fly.java

package diamond;

public interface Fly {
    void fly();
}

Cat.java

package diamond;

public class Cat extends AbsAnimal {
    @Override
    public void sound() {
        System.out.println("야옹");
    }
}

Dog.java

package diamond;

public class Dog extends AbsAnimal {
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}

Bird.java

package diamond;

public class Bird extends AbsAnimal implements Fly{

    @Override
    public void sound() {
        System.out.println("짹짹");
    }

    @Override
    public void fly() {
        System.out.println("짹짹이 날아오르기");
    }
}

작성한 클래스가 정상적으로 호출되는지 살펴보도록 한다.

AnimalMain.java

package diamond;

public class AnimalMain {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        Bird bird = new Bird();

        soundAnimal(cat);
        soundAnimal(dog);
        soundAnimal(bird);

        flyAnimal(bird);
    }

    public static void soundAnimal(AbsAnimal animal) {
        System.out.println("== 동물 울음 소리 ==");
        animal.sound();
    }

    public static void flyAnimal(Fly animal) {
        System.out.println("== 동물 날기 ==");
        animal.fly();
    }

}

실행 결과

== 동물 울음 소리 ==
야옹
== 동물 울음 소리 ==
멍멍
== 동물 울음 소리 ==
짹짹
== 동물 날기 ==
짹짹이 날아오르기

인터페이스 상속과 추상화로 정상적으로 출력한 것을 볼 수 있다.