Что такое подкласс (subclass) в объектно-ориентированном программировании

Ответ

Подкласс (subclass), или дочерний/производный класс, — это класс, который наследует свойства и поведение (атрибуты и методы) от другого класса, называемого суперклассом (superclass), или родительским/базовым классом.

Наследование является одним из ключевых принципов ООП. Его основная цель — повторное использование кода и построение иерархии классов от общего к частному.

Ключевые возможности подкласса:

  1. Наследование: Подкласс автоматически получает все не-приватные методы и атрибуты суперкласса.
  2. Переопределение (Override): Подкласс может предоставить собственную реализацию метода, унаследованного от суперкласса.
  3. Расширение (Extend): Подкласс может добавлять новые методы и атрибуты, которых нет в суперклассе.

Пример на Python

# Суперкласс (базовый класс)
class Vehicle:
    def __init__(self, brand):
        self.brand = brand

    def move(self):
        print("Moving...")

# Подкласс, наследующий от Vehicle
class Car(Vehicle):
    def __init__(self, brand, model):
        # Вызов конструктора родительского класса для инициализации brand
        super().__init__(brand)
        self.model = model # Расширение - новый атрибут

    # Переопределение метода move
    def move(self):
        print(f"The car {self.brand} {self.model} is driving.")

    # Расширение - новый метод
    def honk(self):
        print("Beep beep!")

# Использование
my_car = Car("Tesla", "Model S")
my_car.move()  # Вывод: The car Tesla Model S is driving.
my_car.honk()  # Вывод: Beep beep!
print(my_car.brand) # Атрибут унаследован от Vehicle

Ответ 18+ 🔞

А, ну вот, смотри, классика жанра, блядь! Подкласс, ёпта! Это как если бы твой дед был суперклассом, а ты — его подкласс, и тебе по наследству перепали все его старые шаровары и привычка кряхтеть, когда встаёшь.

Короче, подкласс — это такой класс-сынок, который наследует всё, что не приколочено гвоздями (то есть все не-приватные штуки), от своего суперкласса-родителя. Основная идея — не изобретать велосипед, а взять готовый и прикрутить к нему реактивный двигатель. Повторное использование кода, ёбана!

Что этот мелкий пиздёныш может делать?

  1. Наследовать. Получает от папаши всё: методы, атрибуты — халява, блядь! Как будто нашёл чужой кошелёк.
  2. Переопределять. Может взять дедовский метод, посмотреть на него и сказать: «Да ну нахуй, старик, ты это делаешь как лох!» — и написать свою, более крутую реализацию. Это называется override.
  3. Расширять. Может добавить что-то своё, чего у предка вообще не было. Новые методы, новые поля — вот это вот всё.

Смотри, как это выглядит в коде, на примере, который даже мартышка поймёт:

# Суперкласс (базовый класс) - типа, дед.
class Vehicle:
    def __init__(self, brand):
        self.brand = brand

    def move(self):
        print("Moving...") # Дед едет, как умеет. Медленно и с кряхтением.

# Подкласс, наследующий от Vehicle - типа, внук на тачке.
class Car(Vehicle):
    def __init__(self, brand, model):
        # Сперва крикнем деду: "Дед, инициализируй brand, я занят!"
        super().__init__(brand)
        self.model = model # А это уже моя новая фишка, которой у деда не было.

    # Переопределение метода move. Дед кряхтел, а я буду vroom-vroom!
    def move(self):
        print(f"The car {self.brand} {self.model} is driving.")

    # Расширение - новый метод. У деда такого не было!
    def honk(self):
        print("Beep beep!") # Похуй на соседей!

# Использование
my_car = Car("Tesla", "Model S")
my_car.move()  # Вывод: The car Tesla Model S is driving. (Не "Moving...", блядь!)
my_car.honk()  # Вывод: Beep beep! (Дед так не умел)
print(my_car.brand) # А вот это мы у деда спиздили, работает!

Вот и вся магия, ёпта! Взял старое, что-то переделал, что-то добавил от себя — и готов новый, блядь, класс! Красота, в рот меня чих-пых. Главное — не запутаться в этой иерархии, а то получится пиздопроебибна, где все всё наследуют, и уже ни хуя не понятно, кто от кого и зачем.