Sobes.tech
Junior — Middle

Quelle est la différence entre l'implémentation des méthodes dans une classe abstraite et la définition des méthodes dans une interface?

sobes.tech IA

Réponse de l'IA

Основные отличия между реализацией методов в абстрактном классе и определением методов в интерфейсе в Java:

  • Абстрактный класс может содержать как абстрактные методы (без реализации), так и методы с реализацией. Он может иметь состояние (поля).
  • Интерфейс до Java 8 мог содержать только объявления методов без реализации. Начиная с Java 8, интерфейсы могут содержать методы с реализацией по умолчанию (default методы) и статические методы.

Пример абстрактного класса:

public abstract class Animal {
    public abstract void makeSound();
    public void breathe() {
        System.out.println("Breathing");
    }
}

Пример интерфейса с методом по умолчанию:

public interface Animal {
    void makeSound();
    default void breathe() {
        System.out.println("Breathing");
    }
}

Ключевые отличия:

  • Класс может наследовать только один абстрактный класс, но может реализовывать несколько интерфейсов.
  • Абстрактный класс может содержать состояние, интерфейс — нет (только константы).
  • Интерфейсы больше ориентированы на контракт, абстрактные классы — на частичную реализацию.