← Назад к вопросам

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

1.0 Junior🔥 151 комментариев
#ООП#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между интерфейсом и классом

Это один из ключевых вопросов в ООП на Java. Хотя оба определяют контракт для работы с объектами, они используются в разных целях.

Класс

Класс — это реализация. Он:

  • Содержит полную реализацию методов
  • Имеет состояние (переменные экземпляра)
  • Может иметь конструкторы
  • Наследуется через extends (однозначное наследование)
  • Может быть инстанцирован
  • Может содержать private, protected, public члены
public class Car {
    private String model;
    private int speed;
    
    public Car(String model) {
        this.model = model;
    }
    
    public void accelerate() {
        speed += 10;
    }
}

Интерфейс

Интерфейс — это контракт. Он:

  • Определяет, что должно быть сделано, но не как
  • Не может иметь состояние (только константы с Java 8+)
  • Не имеет конструкторов
  • Реализуется через implements (множественная реализация)
  • Не может быть инстанцирован напрямую
  • В Java 8+ может содержать default методы
public interface Vehicle {
    void accelerate();
    void brake();
    int getSpeed();
}

Практический пример

public class Car implements Vehicle {
    private int speed;
    
    @Override
    public void accelerate() {
        speed += 10;
    }
    
    @Override
    public void brake() {
        speed = 0;
    }
    
    @Override
    public int getSpeed() {
        return speed;
    }
}

public class Bike implements Vehicle {
    private int speed;
    
    @Override
    public void accelerate() {
        speed += 5; // Другая реализация
    }
    
    @Override
    public void brake() {
        speed = 0;
    }
    
    @Override
    public int getSpeed() {
        return speed;
    }
}

Когда что использовать

Класс используется когда:

  • Нужна конкретная реализация
  • Нужно состояние и поведение вместе
  • Есть иерархия "есть-ли"

Интерфейс используется когда:

  • Нужно определить контракт для разных реализаций
  • Хотим гарантировать наличие методов
  • Нужна множественная реализация
  • Применяется принцип "может ли быть"

Современный Java (с Java 8+)

Штучка в том, что границы между ними размылись. Интерфейс теперь может содержать:

  • Default методы с реализацией
  • Static методы
  • Private методы (Java 9+)

Но это не делает интерфейс классом — это просто удобство для совместимости при эволюции кода.