네, 추상 클래스가 인터페이스를 구현할 때는 인터페이스의 모든 메서드를 오버라이드할 필요가 없습니다. 추상 클래스는 인터페이스의 일부 메서드만 구현하고 나머지는 구체 클래스에게 맡길 수 있습니다.
추상 클래스가 인터페이스를 구현하면 다음과 같이 동작합니다:
즉, 추상 클래스는 인터페이스를 부분적으로만 구현하고, 나머지 구현은 하위 클래스에 위임할 수 있습니다.
interface Flyable {
void fly();
void land();
}
abstract class Animal implements Flyable {
@Override
public void land() {
System.out.println("착륙합니다.");
}
}
class Bird extends Animal {
@Override
public void fly() {
System.out.println("새가 날아갑니다.");
}
}
위 코드에서 Animal 클래스는 Flyable 인터페이스를 구현하지만 fly() 메서드는 구현하지 않았습니다. 대신 Bird 클래스에서 fly()를 오버라이드하여 구현하고 있습니다.
@Override 어노테이션은 필수는 아니지만 사용하는 것이 좋습니다.[5]
따라서 인터페이스나 추상 클래스의 메서드를 구현할 때는 @Override를 붙이는 것이 좋은 습관입니다.
Query: 그럼 abstract가 interface를 implements 할때 @override를 안써도 되나요?
Citations: [1] https://www.linkedin.com/advice/0/how-do-you-ensure-compatibility-consistency-when-overriding [2] https://docs.oracle.com/javase/tutorial/java/IandI/override.html [3] https://stackoverflow.com/questions/47501099/does-abstract-class-hide-or-override-the-method-of-the-interface [4] https://stackoverflow.com/questions/49757423/what-happens-when-an-abstract-class-implements-an-interface-in-java [5] https://www.reddit.com/r/learnjava/comments/sv2n82/override_keyword_when_implementing_an_interface/ [6] https://www.jetbrains.com/help/idea/implementing-methods-of-an-interface.html [7] https://hackerbits.com/programming/why-does-an-abstract-class-need-to-implement-interface-methods/
@Override 어노테이션을 사용하지 않아도 됩니다.