Ответ
Для интерфейса (Java 8+):
- Все абстрактные методы (
без тела) обязательны к реализации. - Методы с модификатором
defaultимеют реализацию по умолчанию и реализовывать их не обязательно. - Статические методы интерфейса также не требуют реализации в классе.
Пример с интерфейсом:
interface MyInterface {
void abstractMethod(); // Обязателен к реализации
default void defaultMethod() {
System.out.println("Default implementation");
}
static void staticMethod() {
System.out.println("Static method");
}
}
class MyClass implements MyInterface {
@Override
public void abstractMethod() {
System.out.println("Implemented abstract method");
}
// defaultMethod() можно не переопределять
}
Для абстрактного класса:
- Все абстрактные методы (
abstract) обязательны к реализации. - Обычные (неабстрактные) методы наследуются и могут быть переопределены по необходимости.
Пример с абстрактным классом:
abstract class MyAbstractClass {
abstract void abstractMethod(); // Обязателен к реализации
void concreteMethod() {
System.out.println("Concrete method from abstract class");
}
}
class MyConcreteClass extends MyAbstractClass {
@Override
void abstractMethod() {
System.out.println("Implemented abstract method");
}
// concreteMethod() можно использовать как есть или переопределить
}
Почему это важно: Соблюдение контракта интерфейса/абстрактного класса гарантирует полиморфное поведение и корректную работу системы.