База знаний Бинариум

Интерфейсы и абстрактные классы в Java: в чём разница

Интерфейсы и абстрактные классы в Java

«Чем интерфейс отличается от абстрактного класса?» — вопрос, который почти гарантированно прозвучит на собеседовании. Попробуем разобраться так, чтобы ответить своими словами, а не цитатой из учебника.

Б

Редакция Бинариума

Пишем о профессиях в дизайне, BIM и IT · 6 минут чтения

Интерфейс — договор о возможностях

Интерфейс описывает, что объект умеет делать, но не говорит, кто он. «Умеет летать» могут и птица, и самолёт.

interface Payable {
  void pay(int amount);
}

class Card implements Payable {
  public void pay(int amount) { /* списать с карты */ }
}

Абстрактный класс — общий фундамент

Абстрактный класс описывает, кем объект является, и может хранить общее состояние и готовые методы для наследников.

abstract class Employee {
  protected String name;
  abstract int salary();
  String card() { return name + ": " + salary(); }
}

Курс Бинариума

Java-разработчик с нуля — ООП на практических проектах

Подробнее

Сравнение

КритерийИнтерфейсАбстрактный класс
СмыслЧто умеетКем является
Сколько можноКласс реализует любое числоНаследоваться можно от одного
Поля-состояниеТолько константыЛюбые поля
КонструкторНетЕсть
Готовые методыdefault и static методыЛюбые

Когда что выбирать

  • Интерфейс — когда разные, не связанные классы должны уметь одно и то же: оплачиваться, сравниваться, сохраняться.
  • Абстрактный класс — когда у группы родственных классов есть общие данные и общая логика.
  • Часто их сочетают: интерфейс задаёт контракт, абстрактный класс даёт базовую реализацию.

Главное

  • Интерфейс — «что умеет», абстрактный класс — «кем является».
  • Интерфейсов можно реализовать много, родитель — один.
  • Состояние и конструктор есть только у абстрактного класса.
  • По умолчанию начинайте с интерфейса.

Частые вопросы

Можно ли создать объект абстрактного класса?

Нет, только объект его конкретного наследника.

Зачем default-методы в интерфейсах?

Чтобы добавлять в интерфейс новые методы, не ломая все классы, которые его уже реализуют.

Курс Бинариума

Java-разработчик с нуля

Поймите ООП на практике и уверенно отвечайте на собеседованиях.

  • 11 недель обучения
  • 10+ практических работ
  • Проект на GitHub
11.11.2026
Читайте также