클래스 상속과 인터페이스 구현을 함께 사용하는 예를 알아보자.
AbstractAnimal 은 추상클래스다
sound() 는 동물의 소리를 내기 위한 추상 메서드를 제공한다.
move() 은 동물의 이동을 표현하기위한 메서드이다. 하지만 추상 메서드는 아니며, 상속하여 사용할 것이다
Fly 는 인터페이스 이다. Bird Chicken 은 날 . 수있는 동물이다. fly() 메서드를 구현 해야한다.
Main
package poly.basic.ex6;
public class SoundFlyMain {
public static void main(String[] args) {
Dog dog = new Dog();
Bird bird = new Bird();
Chicken chicken = new Chicken();
SoundAnimal(dog);
SoundAnimal(bird);
SoundAnimal(chicken);
FlyAnimal(bird);
FlyAnimal(chicken);
}
private static void SoundAnimal(AbstractAnimal animal) {
System.out.println("동물소리 내기 시작");
animal.sound();
System.out.println("동물소리 내기 종료");
}
//Fly 인터페이스가 있으면 사용 가능
private static void FlyAnimal(Fly flying) {
System.out.println("새가 날기 시작");
flying.fly();
System.out.println("새가 날기 종료");
}
}
package poly.basic.ex6;
//추상클래스로 생성한다
public abstract class AbstractAnimal {
public abstract void sound();
public void move() {
System.out.println("동물이 이동합니다");
}
}
package poly.basic.ex6;
public interface Fly {
void fly();
}
package poly.basic.ex6;
public class Dog extends AbstractAnimal {
@Override
public void sound() {
System.out.println("Dog sound");
}
}
package poly.basic.ex6;
public class Bird extends AbstractAnimal implements Fly {
@Override
public void fly() {
System.out.println("Bird flying");
}
@Override
public void sound() {
System.out.println("Bird sound");
}
}
package poly.basic.ex6;
public class Chicken extends AbstractAnimal implements Fly{
@Override
public void fly() {
System.out.println("Chicken flying");
}
@Override
public void sound() {
System.out.println("Chicken sound");
}
}
'JAVA' 카테고리의 다른 글
[Java] 불변객체 (0) | 2025.01.09 |
---|---|
[JAVA] Object 다형성 (0) | 2025.01.08 |
[Java] 인터페이스 (1) | 2024.12.06 |
[Java] 추상클래스 (0) | 2024.12.06 |
[Java] 다형성의 활용 (0) | 2024.12.05 |