Дефиниција изведене класе

На почетку школске године учио си о наслеђивању, као једном од основних концепата у објектно-оријентисаном програмирању. Сама реч наслеђивање у говорном језику може да се употреби у разним ситуацијама - на пример: наслеђивање имања од рођака, наслеђивање гена од родитеља итд. За разлику од говорних језика, у програмским језицима не сме да буде недоумица на шта се наслеђивање односи.

Када се у објектно-оријентисаним програмским језицима говори о наслеђивању, строго се говори о односу међу класама. На пример…

  • моторно возило представља класу возила која служе за превоз.

    • аутомобил представља класу моторног возила за превоз људи.

    • камион представља класу моторног возила за превоз робе.

Значи, једна класа, нпр. класа камион, може да наслеђује, односно да буде изведена класа неке друге класе, нпр. класе моторно возило. Обрнуто, нека класа, нпр. класа моторно возило, може да буде базна класа некој класи, нпр. класи камион. Класа камион представља специјални случај класе моторно возило. Важи и да је сваки конкретни објекат класе камион, нпр. Volvo FH16 Aero, уједно и објекат класе моторно возило. Објекти класе камион имају све особине класе моторно возило и још неке своје специфичне. Каже се да класа камион наслеђује класу моторно возило.

У програмском језику C#, наслеђивањем се омогућава креирање нових класа из постојећих класа. Класа из које се наслеђује назива се базна класа (енгл. base class), а класа која наслеђује базну класу назива се изведена класа (енгл. derived class). У изведеној класи наслеђују се чланови базне класе, а могу се дефинисати и нови чланови или променити постојећи.

Ако је дефинисана базна класа BaznaKlasa, изведена класа IzvedenaKlasa која се наслеђује из базне класе декларише се овако:

class IzvedenaKlasa : BaznaKlasa
{

}

У програмском језику C# изведена класа може да има највише једну базну класу! Вишеструко наслеђивање класа није дозвољено, као у програмском језику C++. Заправо већина модерних објектно-оријентисаних програмских језика не подржава вишеструко наслеђивање, јер оно значајно повећава комплексност дизајна софтвера и може да доведе до проблема дијаманта (енгл. Diamond Problem или Deadly Diamond of Death).

Класа System.Object је базна класа из које се наслеђују све друге класе. Свака класа, било да је дефинишеш ти или да је део .NET библиотеке класа, имплицитно или експлицитно је наслеђена из класе System.Object. То значи да, ако си негде дефинисао класу BaznaKlasa овако…

class BaznaKlasa
{
    // ...
}

…онда је компајлер „кришом” преправио твој кôд овако:

class BaznaKlasa : System.Object
{
    // ...
}

Класа System.Object обезбеђује неке основне функционалности свим објектима, као што су методе ToString(), Equals(), GetHashCode() и GetType().