네, 추상 클래스가 인터페이스를 구현할 때는 인터페이스의 모든 메서드를 오버라이드할 필요가 없습니다. 추상 클래스는 인터페이스의 일부 메서드만 구현하고 나머지는 구체 클래스에게 맡길 수 있습니다.

추상 클래스의 인터페이스 구현

추상 클래스가 인터페이스를 구현하면 다음과 같이 동작합니다:

즉, 추상 클래스는 인터페이스를 부분적으로만 구현하고, 나머지 구현은 하위 클래스에 위임할 수 있습니다.

예시

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 어노테이션

@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 어노테이션을 사용하지 않아도 됩니다.