Ответ
Подкласс (subclass, дочерний класс) в Java — это класс, который наследует поля и методы другого класса, называемого суперклассом (superclass, родительским классом). Наследование реализуется с помощью ключевого слова extends.
Основная идея: Создание иерархии классов «является» (is-a), где подкласс является специализированной версией суперкласса.
Пример:
// Суперкласс (родительский)
class Vehicle {
protected String brand;
public void start() {
System.out.println("Vehicle starting...");
}
}
// Подкласс (дочерний) наследует Vehicle
class Car extends Vehicle {
private int numDoors;
// Дополнительное поведение
public void honk() {
System.out.println("Beep beep!");
}
// Переопределение метода суперкласса
@Override
public void start() {
System.out.println("Car engine starting with key...");
super.start(); // Можно вызвать реализацию родителя
}
}
// Использование
Car myCar = new Car();
myCar.brand = "Toyota"; // Поле унаследовано от Vehicle
myCar.start(); // Вызов переопределенного метода -> "Car engine starting..."
myCar.honk(); // Вызов собственного метода подкласса
Ключевые особенности наследования в Java:
- Одиночное наследование: Класс может наследовать только от одного суперкласса.
- Модификаторы доступа: Подкласс имеет доступ к
publicиprotectedчленам суперкласса, но не кprivate. - Полиморфизм: Объект подкласса может быть использован везде, где ожидается объект суперкласса.
- Конструкторы не наследуются, но могут вызываться через
super().
Почему это важно? Наследование позволяет повторно использовать код, выстраивать логические иерархии и реализовывать полиморфизм — один из основных принципов ООП.
Ответ 18+ 🔞
Давай разберёмся с этим вашим наследованием, а то народ путается, как хуй с пальмой. Подкласс — это, по сути, такой наследничек, который всё тянет с родительского стола, но может и своё блюдо добавить, а то и вовсе переплюнуть рецепт.
Вот смотри, есть у тебя какой-нибудь общий класс, ну, скажем, Vehicle (транспорт). Он как дед, который знает основы: у него есть бренд и он умеет заводиться. Всё, больше него нихуя не волнует.
class Vehicle {
protected String brand; // protected — чтоб детишки могли поковыряться
public void start() {
System.out.println("Vehicle starting...");
}
}
А теперь появляется его отбитый сынок Car. Он говорит: «Папа, я тоже транспорт, но я конкретно тачка». И чтобы это доказать, он наследуется через extends. То есть он получает ВСЁ, что было у папаши public или protected (приватное — нет, это личные трусы отца, туда лезть нельзя).
class Car extends Vehicle { // Всё, Герасим, ты теперь наследник. Му-му.
private int numDoors; // А это уже его личная приблуда
// Может добавить своё
public void honk() {
System.out.println("Beep beep!");
}
// А может и переплюнуть отцовский метод! Это называется переопределение (Override).
@Override
public void start() {
System.out.println("Car engine starting with key...");
super.start(); // Но если хочет, может и папин старый способ позвать. Уважение, блядь.
}
}
И вот что получается в итоге:
Car myCar = new Car();
myCar.brand = "Toyota"; // Это поле он спиздил у Vehicle. Легально!
myCar.start(); // Вызовет СВОЙ переопределённый метод -> "Car engine starting..."
myCar.honk(); // А это его личная дудка, которую Vehicle в жизни не имел.
Важные нюансы, чтоб не обосраться:
- Один папаша. В Java нельзя быть мудаком-распиздяем и наследоваться от десяти отцов. Только один суперкласс. Многожёнство не прокатит.
- Доступ как в семье. К
public— все, как на параде. Кprotected— только свои (папа и дети). Кprivate— ваще никому, кроме самого класса. Это его личный дневник, ёпта. - Полиморфизм — это магия. Объект
Carты можешь запихнуть туда, где ждут простоVehicle. Потому что машина является транспортом (is-a relationship). Это как сказать «Вон идёт человек», а это на самом деле хитрая жопа Колян с бутылкой. - Конструкторы. Их не наследуют, как фамильные драгоценности. Их нужно вызывать явно через
super(), если очень надо.
Зачем весь этот цирк? А чтобы не изобретать велосипед каждый раз, блядь! Наследование — это краеугольный камень повторного использования кода. Создал один общий класс, а от него уже плодишь специализированных уродцев: Truck, Motorcycle, Boat. И все они — Vehicle. Красота, ёперный театр!
Вот и вся философия. Либо наследуйся и будь добр, соблюдай правила семьи, либо иди нахуй и пиши свой класс с нуля.