Об’єктно-орієнтоване програмування (ООП) — Спадкування

Наслідування є одним з основних принципів Об'єктно-Орієнтованого Програмування (ООП).
Цей концепт дозволяє дочірньому класу успадковувати методи та атрибути від батьківського класу, що сприяє повторному використанню коду та уникненню дублювання.

Завдяки наслідуванню ми можемо групувати атрибути та методи в базовому класі, в той час як похідні класи можуть додавати свої власні унікальні атрибути та методи.

У цій статті ми будемо використовувати Java як приклад, однак цей самий концепт присутній в інших мовах програмування, таких як PHP, Javascript, C#, та інших.

Практичний приклад

Уявімо, що ви хочете створити два типи ресторанів: піцерію та гамбургерну.

У кожної піцерії та гамбургерної є ім'я та адреса, отже, є класи, які мають спільні атрибути: name та address.

Підхід без наслідування виглядав би так:

class Pizzaria {  
 public String name;  
 public String address;  
}  

class Hamburgueria {  
 public String name;  
 public String address;  
}

Такий підхід повторює одні й ті ж атрибути в обох класах, що не є ефективним.
Використовуючи наслідування, ми можемо створити абстрактний базовий клас під назвою Restaurante та змусити класи Pizzaria та Hamburgueria успадковувати його:

// Абстрактний клас — це клас, який не можна інстанціювати,  
// оскільки він є лише шаблоном для централізації  
// атрибутів та методів, що є спільними.  
// Однак ми могли б зробити той самий приклад  
// без того, щоб клас Restaurante був абстрактним.  

abstract class Restaurante {  
 public String name;  
 public String address;  
}  

class Pizzaria extends Restaurante {  
 // Методи та атрибути, специфічні для піцерії  
}  

class Hamburgueria extends Restaurante {  
 // Методи та атрибути, специфічні для гамбургерної  
}

Завдяки цьому, класи Pizzaria та Hamburgueria успадковують атрибути name та address від класу Restaurante, усуваючи дублювання та централізуючи спільні дані в базовому класі.

Тепер ми можемо додавати унікальні методи та атрибути до класів Pizzaria та Hamburgueria.
Наприклад:

  • Клас Pizzaria може мати метод під назвою makeDelivery() (здійснити доставку).
  • Клас Hamburgueria може мати метод під назвою buyBread() (купити хліб).

Код виглядатиме так:

abstract class Restaurante {  
 public String name;  
 public String address;  
}  

class Pizzaria extends Restaurante {  
 public void makeDelivery() {  
 System.out.println("Здійснюємо доставку з піцерії!");  
 }  
}  

class Hamburgueria extends Restaurante {  
 private void buyBread() {  
 System.out.println("Купуємо хліб для гамбургерної!");  
 }  
}

Тепер ми можемо інстанціювати класи та викликати їх відповідні методи та атрибути:

Pizzaria pizzariaChef = new Pizzaria();  
pizzariaChef.address = "Av Principal";  
pizzariaChef.name = "Pizzaria 10";




Перекладено з: [Programação Orientada a Objetos (POO) — Herança](https://medium.com/@augusto.dev/programa%C3%A7%C3%A3o-orientada-a-objetos-poo-heran%C3%A7a-88da4fdf0970?source=rss------oop-5)

Leave a Reply

Your email address will not be published. Required fields are marked *