JavaRush /Курсы /Java Core /Полезные ссылки от Профессора — 13

Полезные ссылки от Профессора — 13

Java Core
3 уровень , 9 лекция
Открыта

— Амиго, если ты и дальше будешь так «щелкать» задачи и лекции, клянусь, ты станешь самым успешным робоучеником за все мои 130 лет преподавания.

— Здорово! Мне не терпится посмотреть, что будет дальше, может быть отложим теорию на потом?

— Мой юный друг, я всегда говорил: не откладывай до ужина того, что можешь съесть за обедом. То есть, не откладывай на завтра то, что можешь узнать сегодня! Я отыскал специально для тебя отличную статью о разнице между абстрактными классами и интерфейсами.

— Но доктор Билаабо объяснил мне это за пять минут!

— С подробными примерами?

— То-то же.

— Прочти лекцию Разница между абстрактными классами и интерфейсами. Заодно и кое-что новое об интерфейсах InputStream & OutputStream узнаешь. После этого ты точно сможешь сказать, что вопросов больше не осталось :)

Комментарии (173)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Cryptosin Уровень 24
24 сентября 2025
# 1. Интерфейс — В классическом понимании (до Java 8) интерфейс действительно описывает только поведение (методы без реализации). У него нет состояния. — Начиная с Java 8, в интерфейсах появились: * default методы (с реализацией), * static методы. — С Java 9 появились private методы внутри интерфейса (для повторного использования логики). — В интерфейсах можно объявлять константы (public static final поля). Но экземплярного состояния (обычных полей) у интерфейсов нет — это ключевой момент ✅ Вывод: интерфейс в Java по-прежнему не имеет состояния экземпляра. Он описывает "что умеет объект делать", а не "какой он". # 2. Абстрактный класс — Может содержать: * абстрактные методы (только сигнатура, без реализации), * обычные методы (с реализацией), * поля (и статические, и экземплярные). — То есть абстрактный класс действительно может описывать и поведение, и состояние. ✅ Вывод: абстрактный класс — это смесь: часть как интерфейс (контракт), часть как обычный класс (поле + реализация). # 3. Java 22 (и вообще современные версии) Ничего принципиально нового именно в плане состояния интерфейсов не появилось: * интерфейсы по-прежнему не могут иметь экземплярных полей; * абстрактные классы могут. Итог: Интерфейс описывает только контракт (поведение), состояния у него нет. Абстрактный класс может содержать и состояние, и реализацию.
Cryptosin Уровень 24
24 сентября 2025

// Интерфейс — только поведение
interface Movable {
    void move(); // абстрактный метод — контракт
    default void stop() { // default-метод с реализацией
        System.out.println("Stopped.");
    }
    // ВАЖНО: никаких полей экземпляра тут быть не может!
    // public int x; // ❌ Ошибка компиляции
}

// Абстрактный класс — и поведение, и состояние
abstract class Vehicle {
    protected int speed; // состояние (поле экземпляра)

    Vehicle(int speed) {
        this.speed = speed;
    }

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

    void showSpeed() { // обычный метод с реализацией
        System.out.println("Speed: " + speed);
    }
}

// Конкретный класс реализует интерфейс и наследует абстрактный класс
class Car extends Vehicle implements Movable {
    Car(int speed) {
        super(speed);
    }

    @Override
    public void move() {
        System.out.println("Car is moving at " + speed + " km/h");
    }
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car(100);

        car.move();        // поведение из абстрактного класса + интерфейса
        car.stop();        // метод интерфейса (default)
        car.showSpeed();   // метод абстрактного класса, использующий состояние
    }
}
# Что тут видно: * Movable (интерфейс) задаёт только контракт поведения (move, stop). * Vehicle (абстрактный класс) имеет поле speed → состояние** и методы, работающие с ним. * Car объединяет контракт интерфейса и базовую реализацию абстрактного класса. 👉 То есть да, интерфейс в Java по-прежнему без состояния, а абстрактный класс — со состоянием.
Anonymous #3585174 Уровень 33
6 августа 2025
Like
Ромушка Роман Уровень 32
12 октября 2024
Прощелкиваю лекции, чтобы завтра повторить достижение мегатрон, а тут прям фраза, вгоняющая в мурашки: "если ты и дальше будешь прощелкивать задачи..."
{Java_Shark} Уровень 36
7 августа 2024
++
Francesca Уровень 27 Expert
10 марта 2024
SomeBody098 Уровень 51
12 мая 2024
спасибо :)
Anonymous #3390940 Уровень 38
25 января 2024
Еще интересно почитать про паттерны проектирования связанные с использованием интерфейсов Паттерн проектирования Factory Паттерны проектирования: FactoryMethod Паттерны проектирования: AbstractFactory
V 8 Уровень 32
1 декабря 2023
Сегодня проснулся и понял, что будильник прервал сон, в котором я имплементировал классы) Я серьезно))
Юлия Уровень 32
14 ноября 2023
еще до открытия дополнительной лекции я понимала кто ее автор - сколько же раз мы ее уже прочли?
Максим Li Уровень 40
12 ноября 2023
Ок!
Denis Gritsay Уровень 41
20 ноября 2023
ок!
Алексей Уровень 40 Expert
26 октября 2023
Я бы хотел еще и во сне все это видеть))
ElenaN Уровень 37
6 ноября 2023
А мне уже давно все это снится, не знаю, к добру ли это))
Andrey Vysotsky Уровень 32
24 февраля 2024
Ну тут психолги односзначно сходятся во мнении, ещё Фрейд все подробно описал: - если код во сне компилируется - все хорошо - если код не компилируется, у вас подсознательное сексуальное влечение к собственной матери наука-с, не поспоришь