Ответ
Ключевое слово extends в Java используется для реализации наследования классов и ограничения типов в дженериках.
1. Наследование классов
extends позволяет одному классу (подклассу) унаследовать поля и методы другого класса (суперкласса).
// Суперкласс (родительский)
class Vehicle {
protected String brand;
public void honk() {
System.out.println("Beep!");
}
}
// Подкласс (дочерний) наследует Vehicle
class Car extends Vehicle {
private int doors;
public Car(String brand, int doors) {
this.brand = brand; // Поле унаследовано
this.doors = doors;
}
// Метод honk() также унаследован
}
// Использование
Car myCar = new Car("Toyota", 4);
myCar.honk(); // Вывод: Beep!
Почему это нужно? Наследование поддерживает принцип DRY (Don't Repeat Yourself), позволяет создавать иерархии и реализовывать полиморфизм.
2. Ограничение типов в дженериках (Upper Bounded Wildcard)
extends в контексте дженериков задает верхнюю границу типа, указывая, что параметр типа должен быть этим классом или его подклассом.
// Метод принимает список любых чисел (Number или его подклассы: Integer, Double)
public double sumOfList(List<? extends Number> list) {
double sum = 0.0;
for (Number num : list) {
sum += num.doubleValue();
}
return sum;
}
// Можно вызвать с List<Integer> или List<Double>
Почему это важно? Обеспечивает безопасность типов на этапе компиляции, позволяя писать гибкий, но типобезопасный код.