Наследование (extends)

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

Наследование — один из столпов объектно-ориентированного программирования в Java. Ключевое слово extends позволяет создать новый класс на основе уже существующего.

Дочерний класс автоматически получает все поля и методы родительского класса (кроме private). Это избавляет от дублирования кода и помогает выстраивать логичные иерархии классов.

  • Синтаксис: class Dog extends Animal { }
  • Дочерний класс может добавлять свои поля и методы
  • В Java класс может наследоваться только от одного класса

На этом тренажере ты попрактикуешься в создании классов-наследников и разберёшься, как работает передача свойств между классами. Задания построены от простого к сложному — начнём с базового синтаксиса и дойдём до практических примеров использования наследования.

Список тем

1. Базовый синтаксис наследования

id: 40489_inh_01_syntax

Дополните объявление дочернего класса так, чтобы оно корректно использовало механизм наследования в Java. В уже готовом коде описан базовый класс, от которого нужно унаследоваться. Заполните пропуски в строке объявления дочернего класса, указав конструкцию наследования и имя родительского типа. В результате код должен успешно компилироваться, а класс Dog станет потомком существующего класса.

Заполните пропуски
class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}
class Dog input1S input2S {
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Собери класс-наследник

id: 40489_inh_02_build

Из предложенных строк соберите корректный класс Cat на Java, который наследуется от класса Animal. В итоговом коде должен быть объявлен класс с ключевым словом extends, конструктор Cat(String name) с вызовом super(name) и метод meow(), выводящий в консоль имя животного и звук мяуканья. Одна‑две строки содержат синтаксические ошибки и не должны входить в финальное решение.

Перетяните в правильном порядке строки из одного блока в другой
public class Cat extends Animal {
    public Cat(String name) {
        super(name); }
    public void meow() {
        System.out.println(getName() + " says meow"); }
}
    public Cat(String name) : super(name) {}
        System.out.println(getName() + " says meow")
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Что выведет программа?

id: 40489_inh_03_predict

Проанализируйте фрагмент кода на Java, в котором класс Car наследует класс Vehicle и использует его метод. Определите, какая именно строка будет выведена в консоль при выполнении метода main(), учитывая механизм наследования и отсутствие переопределения метода.

Выберите правильный вариант ответа
class Vehicle {
    void drive() {
        System.out.println("Vehicle");
    }
}

class Car extends Vehicle { }

public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.drive();
    }
}
Сообщения
Проверить
Показать подсказку

4. Термины наследования

id: 40489_inh_04_compare

В этом задании тренажёра по Java рассматриваются ключевые термины, связанные с наследованием и полиморфизмом. В левой колонке перечислены названия понятий, в правой — их формулировки. Сопоставьте элементы левой колонки с соответствующими элементами правой, чтобы лучше понять роль базового и производного классов, а также назначение специальных ключевых слов языка.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
extends
super
Родительский (базовый, суперкласс)
Дочерний (производный, подкласс)
Переопределение метода (override)
protected
Ключевое слово, используемое в объявлении класса для указания, что он наследует другой класс.
Класс, от которого наследуются поля и методы; находится выше в иерархии.
Специальное ключевое слово для обращения к конструктору или членам родительского класса.
Определение в дочернем классе метода с такой же сигнатурой, чтобы изменить реализацию метода родительского класса.
Модификатор доступа, разрешающий доступ к члену внутри пакета и в подклассах, даже если они находятся в других пакетах.
Класс, который наследует другой класс и может расширять или изменять его поведение.
Сообщения
Проверить
Показать подсказку

5. Найди ошибку в наследовании

id: 40489_inh_05_error

В этом фрагменте Java-кода класс Dog должен наследоваться от класса Animal, но в объявлении использован некорректный синтаксис наследования. Найдите строку с ошибкой и исправьте её так, чтобы связь наследования между классами была оформлена правильно и код можно было скомпилировать без ошибок.

Найдите ошибку и исправьте
class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}
class Dog implements Animal {
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Найди унаследованные элементы

id: 40489_inh_06_click

Перед вами фрагмент кода на Java с базовым и дочерним классами. Ваша задача — по коду определить, какие поля и методы дочерний класс получает по наследованию от родительского. Отметьте только те объявления полей и методов, которые определены в родительском классе и доступны дочернему через extends. Не выделяйте элементы, объявленные только в дочернем классе, а также имена классов и другие части кода.

Кликните по всем фрагментам, которые подходят под условие задания.
class BankAccount {
    public String {{ownerName~|~t1}};
    protected double {{balance~|~t2}};

    public void {{deposit~|~t3}}(double amount) {
        balance += amount;
    }

    public void {{withdraw~|~t4}}(double amount) {
        balance -= amount;
    }
}

class LoggingAccount extends BankAccount {
    private String {{logFile~|~t5}};

    public void {{logOperation~|~t6}}(String message) {
        System.out.println(message);
    }

    public double {{getBalance~|~t7}}() {
        return balance;
    }
}
Сообщения
Проверить
Показать подсказку

7. Заполни иерархию классов

id: 40489_inh_07_select

Дополните фрагмент Java‑кода с пропусками, чтобы корректно объявить иерархию классов: базовый класс Person и производный класс Student. Используйте выпадающий список для каждого пропуска, чтобы выбрать подходящее ключевое слово или имя класса. В результате класс Student должен наследоваться от Person, а в методе main нужно объявить переменную подходящего типа и создать объект студента.

Нужно правильно расставить в пропуски предложенные варианты
public input1S Person { }
public input2S Student input3S Person { }
public class Main {
    public static void main(String[] args) {
        input4S student = new Student();
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

8. Вызов конструктора родителя

id: 40489_inh_08_super

В Java, если в родительском классе нет конструктора без параметров, дочерний класс обязан явно вызвать существующий конструктор родителя. Дополните код класса Circle, чтобы в его конструкторе происходил корректный вызов конструктора класса Shape с передачей нужного аргумента.

Заполните пропуски
class Shape {
    String color;
    
    // Конструктор родителя принимает строку
    Shape(String color) {
        this.color = color;
    }
}

class Circle extends Shape {
    Circle(String color) {
        // Явный вызов конструктора родителя
        input1S(input2S);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру