← Назад к вопросам

Приведи пример Наследования

1.2 Junior🔥 91 комментариев
#Kotlin основы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Пример Наследования в ООП (на языке Java)

Наследование — один из четырех основных принципов объектно-ориентированного программирования (ООП), который позволяет создавать новый класс на основе существующего. Это обеспечивает переиспользование кода и создание иерархии классов.

Основная идея

  • Родительский класс (суперкласс): содержит общие характеристики и поведение.
  • Дочерний класс (подкласс): наследует все поля и методы суперкласса, может добавлять новые или изменять унаследованные.

Пример: Транспортные средства

Рассмотрим иерархию классов для моделирования транспортных средств.

1. Родительский класс Vehicle (Транспортное средство)

public class Vehicle {
    // Общие поля
    protected String brand;
    protected int maxSpeed;
    
    // Конструктор
    public Vehicle(String brand, int maxSpeed) {
        this.brand = brand;
        this.maxSpeed = maxSpeed;
    }
    
    // Общие методы
    public void startEngine() {
        System.out.println(brand + ": Двигатель запущен");
    }
    
    public void stopEngine() {
        System.out.println(brand + ": Двигатель остановлен");
    }
    
    public void displayInfo() {
        System.out.println("Марка: " + brand + ", Макс. скорость: " + maxSpeed + " км/ч");
    }
}

2. Дочерний класс Car (Автомобиль)

public class Car extends Vehicle {
    // Уникальное поле
    private int numDoors;
    
    // Конструктор
    public Car(String brand, int maxSpeed, int numDoors) {
        // Вызов конструктора родительского класса
        super(brand, maxSpeed);
        this.numDoors = numDoors;
    }
    
    // Уникальный метод
    public void openTrunk() {
        System.out.println(brand + ": Багажник открыт");
    }
    
    // Переопределение метода (полиморфизм)
    @Override
    public void displayInfo() {
        super.displayInfo(); // Вызов метода родителя
        System.out.println("Количество дверей: " + numDoors);
    }
}

3. Дочерний класс Motorcycle (Мотоцикл)

public class Motorcycle extends Vehicle {
    // Уникальное поле
    private boolean hasSidecar;
    
    // Конструктор
    public Motorcycle(String brand, int maxSpeed, boolean hasSidecar) {
        super(brand, maxSpeed);
        this.hasSidecar = hasSidecar;
    }
    
    // Уникальный метод
    public void doWheelie() {
        System.out.println(brand + ": Колесо!");
    }
    
    // Переопределение метода
    @Override
    public void displayInfo() {
        super.displayInfo();
        System.out.println("Есть коляска: " + (hasSidecar ? "Да" : "Нет"));
    }
}

4. Демонстрация работы

public class Main {
    public static void main(String[] args) {
        // Создание объектов
        Car myCar = new Car("Toyota", 220, 4);
        Motorcycle myBike = new Motorcycle("Harley-Davidson", 180, false);
        
        // Использование унаследованных методов
        myCar.startEngine();    // Унаследовано от Vehicle
        myBike.startEngine();   // Унаследовано от Vehicle
        
        // Использование уникальных методов
        myCar.openTrunk();      // Специфично для Car
        myBike.doWheelie();     // Специфично для Motorcycle
        
        // Полиморфизм
        myCar.displayInfo();    // Вызовет переопределенный метод
        myBike.displayInfo();   // Вызовет переопределенный метод
        
        // Полиморфизм через родительский тип
        Vehicle[] vehicles = new Vehicle[2];
        vehicles[0] = myCar;
        vehicles[1] = myBike;
        
        System.out.println("\nИтерация по массиву:");
        for (Vehicle vehicle : vehicles) {
            vehicle.displayInfo(); // Вызовется соответствующий переопределенный метод
        }
    }
}

Ключевые моменты наследования

Преимущества:

  • Повторное использование кода: общая логика в суперклассе
  • Расширяемость: легко добавлять новые классы в иерархию
  • Полиморфизм: объекты подклассов могут использоваться как объекты суперкласса

Важные аспекты:

  1. Модификатор protected: дает доступ к полям/методам подклассам
  2. Ключевое слово super:
    • super() — вызов конструктора родителя
    • super.method() — вызов метода родителя
  3. Переопределение методов: изменение поведения унаследованных методов
  4. Одиночное наследование: в Java класс может наследовать только от одного класса

Практическое применение в Android

В Android-разработке наследование используется повсеместно:

  • Activity, Fragment, View — базовые классы Android SDK
  • Собственные кастомные View наследуются от стандартных
  • Адаптеры RecyclerView наследуются от RecyclerView.Adapter
  • База данных: создание DAO-классов с общей логикой
// Пример на Kotlin (для Android)
open class BaseActivity : AppCompatActivity() {
    // Общая логика для всех активностей
    protected fun showToast(message: String) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
}

class MainActivity : BaseActivity() {
    // Наследует все методы BaseActivity
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        showToast("Активити создана") // Использование унаследованного метода
    }
}

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