Наследование — один из столпов объектно-ориентированного программирования в Java. Ключевое слово extends позволяет создать новый класс на основе уже существующего.
Дочерний класс автоматически получает все поля и методы родительского класса (кроме private). Это избавляет от дублирования кода и помогает выстраивать логичные иерархии классов.
- Синтаксис:
class Dog extends Animal { } - Дочерний класс может добавлять свои поля и методы
- В Java класс может наследоваться только от одного класса
На этом тренажере ты попрактикуешься в создании классов-наследников и разберёшься, как работает передача свойств между классами. Задания построены от простого к сложному — начнём с базового синтаксиса и дойдём до практических примеров использования наследования.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Базовый синтаксис наследования
Дополните объявление дочернего класса так, чтобы оно корректно использовало механизм наследования в Java. В уже готовом коде описан базовый класс, от которого нужно унаследоваться. Заполните пропуски в строке объявления дочернего класса, указав конструкцию наследования и имя родительского типа. В результате код должен успешно компилироваться, а класс Dog станет потомком существующего класса.
class Animal {
void makeSound() {
System.out.println("Some sound");
}
}
class Dog input1S input2S {
}2. Собери класс-наследник
Из предложенных строк соберите корректный класс 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. Что выведет программа?
Проанализируйте фрагмент кода на 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. Термины наследования
В этом задании тренажёра по Java рассматриваются ключевые термины, связанные с наследованием и полиморфизмом. В левой колонке перечислены названия понятий, в правой — их формулировки. Сопоставьте элементы левой колонки с соответствующими элементами правой, чтобы лучше понять роль базового и производного классов, а также назначение специальных ключевых слов языка.
5. Найди ошибку в наследовании
В этом фрагменте Java-кода класс Dog должен наследоваться от класса Animal, но в объявлении использован некорректный синтаксис наследования. Найдите строку с ошибкой и исправьте её так, чтобы связь наследования между классами была оформлена правильно и код можно было скомпилировать без ошибок.
class Animal { void makeSound() { System.out.println("Some sound"); }}class Dog implements Animal {}6. Найди унаследованные элементы
Перед вами фрагмент кода на 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. Заполни иерархию классов
Дополните фрагмент 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();
}
}8. Вызов конструктора родителя
В Java, если в родительском классе нет конструктора без параметров, дочерний класс обязан явно вызвать существующий конструктор родителя. Дополните код класса Circle, чтобы в его конструкторе происходил корректный вызов конструктора класса Shape с передачей нужного аргумента.
class Shape {
String color;
// Конструктор родителя принимает строку
Shape(String color) {
this.color = color;
}
}
class Circle extends Shape {
Circle(String color) {
// Явный вызов конструктора родителя
input1S(input2S);
}
}