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);
}
}