Sobes.tech
Junior — Middle
68

Какие компоненты могут присутствовать в абстрактном классе, но запрещены в интерфейсе?

Answer from AI

sobes.tech AI

В абстрактном классе в Java могут присутствовать следующие компоненты, которые запрещены в интерфейсе (особенно в классических версиях Java до Java 8):

  • Поля с состоянием (переменные экземпляра) — абстрактный класс может содержать поля с конкретными значениями, тогда как интерфейс не может иметь нестатических полей.
  • Конструкторы — абстрактный класс может иметь конструкторы для инициализации состояния, интерфейсы не имеют конструкторов.
  • Методы с реализацией (до Java 8) — раньше интерфейсы могли содержать только абстрактные методы, а абстрактные классы — как абстрактные, так и конкретные методы.

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

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

public abstract class Animal {
    protected String name; // поле

    public Animal(String name) { // конструктор
        this.name = name;
    }

    public abstract void makeSound();

    public void printName() { // конкретный метод
        System.out.println("Name: " + name);
    }
}