Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Пример Наследования в ООП (на языке 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(); // Вызовется соответствующий переопределенный метод
}
}
}
Ключевые моменты наследования
Преимущества:
- Повторное использование кода: общая логика в суперклассе
- Расширяемость: легко добавлять новые классы в иерархию
- Полиморфизм: объекты подклассов могут использоваться как объекты суперкласса
Важные аспекты:
- Модификатор
protected: дает доступ к полям/методам подклассам - Ключевое слово
super:super()— вызов конструктора родителяsuper.method()— вызов метода родителя
- Переопределение методов: изменение поведения унаследованных методов
- Одиночное наследование: в 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-приложения.