Назад Вперед Зміст

Спадковість. 🐸 Як жаба мріяла стати ссавцем

Сцена 1: Базова структура класів

public abstract class Animal
{
  public string Name { get; set; }
  public int Age { get; set; }
  public abstract void MakeSound();
}
public class Mammal : Animal
{
  public virtual void GiveBirth()
  {
    Console.WriteLine("Народжую живого дитинча");
  }
}
public class Amphibian : Animal
{
  public virtual void LayEggs()
  {
    Console.WriteLine("Відкладаю ікру");
  }
}

Сцена 2: Спроба змінити природу

// Кваква намагається стати ссавцем
public class Frog : Mammal // ERROR! Компілятор не дозволяє
{
  public override void MakeSound()
  {
    Console.WriteLine("Ква-муррр!");
  }
  
  public override void GiveBirth()
  {
    // Фізіологічно неможливо для жаби!
    throw new NotImplementedException();
  }
}

Компілятор: "CS0535: 'Frog' does not implement inherited abstract member 'Mammal.GiveBirth()'"

Сцена 3: Правильний підхід через інтерфейси

public interface ISwimmer
{
  void Swim();
}
public interface IJumper
{
  void Jump();
}
public class Frog : Amphibian, ISwimmer, IJumper
{
  public override void MakeSound()
  {
    Console.WriteLine("Ква-ква!");
  }
  
  public void Swim()
  {
    Console.WriteLine("Пливу як професіонал!");
  }
  
  public void Jump()
  {
    Console.WriteLine("Стрибаю на 2 метри!");
  }
}

🔗 Наслідування

Клас може успадковувати від іншого класу, отримуючи його властивості та методи

🎭 Поліморфізм

Можливість використовувати об'єкти різних класів через спільний інтерфейс

📦 Інкапсуляція

Приховування внутрішньої реалізації та надання публічного інтерфейсу

💡 Мораль історії:

"Краще бути першою жабою, ніж останнім ссавцем!"
У світі OOP кожен клас має своє унікальне призначення. Спробувати змінити фундаментальну природу об'єкта - це шлях до помилок компіляції та архітектурних проблем!

🎯 Висновки для розробника:

Назад Вперед Зміст