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

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

Открыта

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

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

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

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

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

— То-то же.

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

Комментарии (174)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
TimJohnzz
Уровень 19
21 сентября, 04:28
Капец тут в комментах типы с 2017, один senior в Google, второй в Epam, ребята, я немного отстаю, подождите еще
Grigoryvvv
Уровень 28
Expert
11 августа, 12:42
11.08.2026 / 23 уровень
Cryptosin Crypto Magnat
24 сентября 2025, 14:37
# 1. Интерфейс - В классическом понимании (до Java 8) интерфейс действительно описывает только поведение (методы без реализации). У него нет состояния. - Начиная с Java 8, в интерфейсах появились: * default методы (с реализацией), * static методы. - С Java 9 появились private методы внутри интерфейса (для повторного использования логики). - В интерфейсах можно объявлять константы (public static final поля). Но экземплярного состояния (обычных полей) у интерфейсов нет — это ключевой момент ✅ Вывод: интерфейс в Java по-прежнему не имеет состояния экземпляра. Он описывает "что умеет объект делать", а не "какой он". # 2. Абстрактный класс - Может содержать: * абстрактные методы (только сигнатура, без реализации), * обычные методы (с реализацией), * поля (и статические, и экземплярные). - То есть абстрактный класс действительно может описывать и поведение, и состояние. ✅ Вывод: абстрактный класс — это смесь: часть как интерфейс (контракт), часть как обычный класс (поле + реализация). # 3. Java 22 (и вообще современные версии) Ничего принципиально нового именно в плане состояния интерфейсов не появилось: * интерфейсы по-прежнему не могут иметь экземплярных полей; * абстрактные классы могут. Итог: Интерфейс описывает только контракт (поведение), состояния у него нет. Абстрактный класс может содержать и состояние, и реализацию.
Cryptosin Crypto Magnat
24 сентября 2025, 14:44
// Интерфейс — только поведение
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 по-прежнему без состояния, а абстрактный класс - со состоянием.
Ruslan Gabzalilov
Уровень 27
26 января, 10:51
Спасибо тебе добрый человек)
Anonymous #3585174
Уровень 33
6 августа 2025, 10:13
Like
Ромушка Роман
Уровень 32
12 октября 2024, 20:05
Прощелкиваю лекции, чтобы завтра повторить достижение мегатрон, а тут прям фраза, вгоняющая в мурашки: "если ты и дальше будешь прощелкивать задачи..."
{Java_Shark}
Уровень 36
7 августа 2024, 10:26
++
Francesca
Уровень 27
Expert
10 марта 2024, 12:06
SomeBody098веник в бане
12 мая 2024, 16:47
спасибо :)
Anonymous #3390940
Уровень 38
25 января 2024, 07:02
Еще интересно почитать про паттерны проектирования связанные с использованием интерфейсов Паттерн проектирования Factory Паттерны проектирования: FactoryMethod Паттерны проектирования: AbstractFactory
V 81c dev :') в Google
1 декабря 2023, 06:50
Сегодня проснулся и понял, что будильник прервал сон, в котором я имплементировал классы) Я серьезно))
Юлия
Уровень 32
14 ноября 2023, 10:21
еще до открытия дополнительной лекции я понимала кто ее автор - сколько же раз мы ее уже прочли?