Успадкування (програмування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

В об'єктно-орієнтованому програмуванні, успадкува́ння — механізм утворення нових класів на основі використання вже існуючих. При цьому властивості і функціональність батьківського класу переходять до класу нащадка(дочірнього).

Принцип успадкування[ред.ред. код]

InheritancePgmUML.svg

Визначення нового класу (породжений клас, підклас, англ. derived class, англ. subclass) може базуватись на визначенні вже існуючого (базовий клас, англ. base class, англ. superclass). В такому випадку, новий клас отримає властивості та поведінку базового класу, та доповнить їх своїми власними. У випадку одиничного успадкування, у кожного класу може бути лише один безпосередній базовий клас. У випадку множинного успадкування, дозволяється існування декількох безпосередніх надкласів.

Застосування механізму успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.

Приклад на C#[ред.ред. код]

Приклад на мові C# (консольна програма), в якій показується наслідування класу Class2 (subclass) у класу Class1 (superclass):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();   // створюємо об'єкт Class1
            c1.some_pub_var2 = 1;
            c1.some_pub_func();
 
            Class2 c2 = new Class2();   // створюємо об'єкт Class2, який успадковує всі відкриті методи та поля Class1
            c2.some_pub_var2 = 1;       // як бачимо, в Class2 є поле some_pub_var2 із Class1 (успадкування)
            c2.some_pub_var3 = 2;       // це поле доступне тільки у Class2
            c2.some_pub_func();         // цей метод також успадкувався з Class1 
 
            Console.ReadLine();
        }
    }
 
    class Class1
    {
        private int some_priv_var1;     // деяке приватне тестове поле
        public int some_pub_var2;       // деяке загальнодоступне(публічне) поле
 
        private void some_priv_func()   // приватний метод
        {
            Console.WriteLine("Call some_priv_func!");
        }
        public void some_pub_func()     // загальнодоступний метод
        {
            Console.WriteLine("Call some_pub_func!");
        }
    }
 
    class Class2 : Class1   // Class2 успадковує властивості класу Class1
    {
        public int some_pub_var3;       // публічна змінна (доступна тільки для Class2)
    }
 
}

Приклад С++[ред.ред. код]

class A {};
class B : private A {};
class C : public B {
	::A* p1; // тут все добре
	A* p2;   // помилка, через вкладання імен (en. class name injection)
};

Джерела інформації[ред.ред. код]

  • Grady Booch (2007). Object-oriented analysis and design with applications (вид. друге). Addison-Wesley. ISBN 0-201-89551-X. 

Див. також[ред.ред. код]

Комп'ютер Це незавершена стаття про комп'ютери.
Ви можете допомогти проекту, виправивши або дописавши її.