В чем разница между абстрактным класом и интерфейсом

«В чем разница между абстрактным класом и интерфейсом» — вопрос из категории ООП, который задают на 44% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные различия:

  1. Наследование: Класс может наследовать только один абстрактный класс, но реализовывать множество интерфейсов.

  2. Реализация: Абстрактный класс может содержать реализованные методы, интерфейс - только сигнатуры (до Java 8). Сейчас интерфейсы могут иметь default и static методы.

  3. Состояние: Абстрактный класс может содержать поля, интерфейс - только константы (public static final).

Пример:

// Интерфейс
interface Drawable {
    void draw(); // абстрактный метод
    default void resize() { /* реализация */ }
}

// Абстрактный класс
abstract class Shape {
    protected int x, y; // поля

    abstract void area(); // абстрактный метод

    void move() { /* реализация */ } 
}

Видео-ответы