Загрузка...

Наследование в Java

Создайте дочерний тип с extends, чтобы использовать метод, написанный у родителя. Поместите horn на Car, чтобы печатался beep. Напишите class Truck extends Car. В Yard.java создайте Truck и вызовите t.horn(). Скомпилируйте javac Yard.java и запустите java Yard. На экране должен быть beep. Вторая демонстрация тоже создаёт простой Car, чтобы вы увидели: родитель работает и после появления потомка. Оставьте super для следующей страницы. Не переписывайте horn в Truck на этой странице — переопределение позже.

Потомок сохраняет метод родителя

На странице paths места назывались через Paths.get. Эта страница открывает новый модуль: один класс может быть потомком другого. Откройте учебный файл Yard.java. Держите имя public-класса Yard, чтобы оно совпадало с файлом. Удалите оставшиеся демо пути Route, писатели Store, сканеры Reader и любой клавиатурный Scanner. Программа не должна ждать ввода. Для этого урока строка import не нужна.
Над public-классом объявите родительский тип package-private:
class Car {
Внутри Car напишите метод экземпляра void horn(), который печатает beep:
System.out.println("beep");
Затем объявите потомка:
class Truck extends Car {
На этой странице тело Truck оставьте пустым. Потомок не переписывает horn. Пустых скобок достаточно, чтобы сказать: Truck — вид Car.
В Yard.main создайте грузовик и вызовите унаследованный метод:
Truck t = new Truck();
t.horn();
Вызов работает, потому что extends Car связывает Truck с Car. Вы не копировали horn в Truck.

Yard Truck extends Car horn beep

java
class Car {
    void horn() {
        System.out.println("beep");
    }
}

class Truck extends Car {
}

public class Yard {
    public static void main(String[] args) {
        Truck t = new Truck();
        t.horn();
    }
}

Из папки с Yard.java выполните javac Yard.java. Когда скобки и точки с запятой сходятся, javac не пишет свою строку. Затем запустите java Yard — не java Yard.java. Уберите суффикс .java из команды запуска. В файле один public-класс, имя совпадает с Yard. Вспомогательные типы Car и Truck без public в этой начальной форме. Три public-класса в одном файле заставят javac отказать — помните правило со страницы classes.
Экран показывает beep. Пройдите запуск один раз. Java стартует в Yard.main. new Truck() создаёт объект truck. t.horn() находит horn у родителя Car через наследование. Метод печатает beep. Если javac не находит horn у Truck, строка extends Car пропала или с опечаткой — верните её. Если видите note.txt или печать пути, ещё запускается остаток Route — переключитесь на java Yard. Если терминал ждёт ввода, в файле остался клавиатурный Scanner — удалите.
Пишите extends внимательно. Запятая или слово implements по ошибке — не этот урок. Наследование здесь — ключевое слово extends между именами потомка и родителя. Имя потомка первым: Truck extends Car, не наоборот.
Не пишите super на этой странице. Вызов родительского конструктора через super — следующий урок. Не пишите второй horn внутри Truck; история override позже. Сегодня потомок пуст и всё равно использует метод родителя. Пустое тело — намеренное обучение, а не ошибку, которую «чинят» копированием horn в Truck.

📊 Parent and child on this page

Piece Role
Car parent type that owns horn
Truck child type via extends Car
Yard public starter with main
horn prints beep; written only on Car

Родитель всё ещё работает сам

Вторая программа сохраняет тот же Car, тот же пустой Truck extends Car и тот же public Yard. В main создайте и Car, и Truck, и на каждом вызовите horn.

Yard Car and Truck both horn

java
class Car {
    void horn() {
        System.out.println("beep");
    }
}

class Truck extends Car {
}

public class Yard {
    public static void main(String[] args) {
        Car c = new Car();
        Truck t = new Truck();
        c.horn();
        t.horn();
    }
}

Скомпилируйте javac Yard.java, затем запустите java Yard. Экран показывает beep, затем снова beep. Первая строка от простого Car. Вторая от Truck, унаследовавшего horn. Создание потомка не удалило и не сломало родительский тип. Оба объекта могут вызывать одно тело метода, написанное раз на Car. Вы по-прежнему сами создаёте каждый объект через new; строка extends не создаёт truck автоматически.
Этот контраст — контрольная точка. Наследование добавляет дочерний путь к существующему методу. Родителя удалять не нужно. Если убрать extends Car у Truck, t.horn() не скомпилируется, потому что Truck больше не получает horn. Держите extends для учебного потомка. Файл с одним truck — когда нужен тихий beep. Файл с двумя объектами — когда нужно доказать, что родитель ещё отвечает.

Сравнение с paths на Route

На странице paths java Route называл папки и файлы. На этой странице java Yard связывает типы через extends. Файлы Route оставьте как историю, если они рядом; для демо наследования запускайте java Yard, чтобы экран совпадал с уроком.
extends, повторное использование метода родителя и пустое тело потомка — новые элементы. Вы уже знаете new и методы экземпляра с прошлых OOP-страниц. Сегодня эти части впервые встречаются с наследованием на этом пути курса. Держите учебные имена Car, Truck и Yard, чтобы команды compile и run оставались короткими.

Что эта страница оставляет для super

Эта страница показывает потомка, который использует метод родителя без super. Следующая страница вводит super, чтобы потомок намеренно обращался к родителю, особенно у конструкторов. Оставайтесь на extends и унаследованном вызове horn здесь. Пока не добавляйте super() как требование в эти демо Yard.

Перед super

Вы можете написать Truck extends Car, создать Truck и увидеть beep от horn. Можете создать простой Car и увидеть, что родитель всё ещё печатает beep. Скомпилируйте Yard.java и по очереди запустите java Yard для каждой сохранённой демо. Потомок остался пустым и всё равно использовал метод родителя. Следующая страница — super, где потомок говорит с родителем прямее.
Держите демо с одним truck для ясного унаследованного вызова. Держите демо с двумя объектами, чтобы доказать, что родитель работает сам. Пока держите super вне этой страницы. Эти три привычки — контрольная точка перед продолжением. Когда beep появляется от Truck, который никогда не писал свой horn, наследование сделало свою работу в этом уроке и вы готовы к теме super.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
5
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху