You are on page 1of 26

Nasleđivanje

Nasleđivanje klasa (inheritance)


Polimorfizam
Virtualni metodi
protected klasifikator pristupa
Nasleđivanje (inheritance)

 Upoređivanjem objekata u pojedinim aplikacijama uočava se da je veliki broj


objekata međusobno veoma sličan.

 Nasleđivanje predstavlja mogućnost da se jedna klasa definiše na osnovu


neke druge klase.

 Nova klasa ima sve osobine kao i postojeća klasa, pri čemu neke od
nasleđenih osobina mogu biti promenjene, a neke nove dodate.

 To konkretno znači da ne moramo da prepisujemo postojeću klasu, već


samo navedemo od koje klase polazimo i potom modifikujemo i dodamo
neke nove članice klase.
Nasleđivanje (inheritance)

 Nasleđivanje (inheritance) je kao odnos roditelj-dete, gde dete nasleđuje


svojstva i metode od roditelja.

 Osnovna ili roditeljska klasa je klasa od koje se polazi i koja se nasleđuje od


strane drugih klasa.

 Izvedene klase ili klase potomci su one koje nasleđuju osnovnu roditeljsku
klasu.

 Svi metodi i sva svojstva roditeljske klase mogu biti iskorišćena u izvedenoj
klasi izuzev privatnih članova klase.

 Do nasleđivanja se dolazi generalizacijom ili specijalizacijom.


Generalizacija
 Pođemo od 2D oblika kao što su trougao, pravougaonik, krug …

 Uočavanjem njihovih zajedničkih karakteristika pravimo novu, roditeljsku klasu Figura.

 Generalizacija znači uopštavanje: put od pojedinačnog ka opštem

Geo-
metrija

generalizacija
Figure Tela

Pravo-
Trougao ... Krug Valjak Kupa ... Lopta
ugaonik
Specijalizacija
 Specijalizacija je obrnuti postupak – put od opšteg ka pojedinačnom.

 Pođemo od klase, na primer Ptice, pa u njoj uočavamo grupe koje imaju slične
karakteristike i izdvajamo ih u posebne izvedene klase. Npr. Price Letaci i Ptice Ne
Letaci…

Ptice

Ptice Ptice ne

specijalizacija
Letaci Letaci

Vrabac Golub ... Soko Pingvin Noj ... Paun

Vrabac
Mika Vrac Mika i vrabac Jova su konkretne instance
(objekti) klase Vrabac i oni nasleđuju sve
Vrabac osobine svojih nadklasa.
Jova
Primer: Škola
Osoba

Profesor Nenastavno Ucenik


osoblje

Razredni
starešina
Admini- Pomoćni
stracija radnik

 Npr, posmatrajmo klasu Profesor: neki profesori imaju dodatnu funkciju i stoga iz klase
Profesor izvodimo klasu RazredniStaresina.

 RazredniStaresina ima sve šta ima i Profesor, ali ima i dodatni član klase – odeljenje
kome je dati profesor razredni starešina.
Nasleđivanje (inheritance)
 Klasa Profesor ima:
 svojstvo ImePrezime koje sadrži ime i prezime profesora,
 konstruktor klase u kome se postavlja ime i prezime
 metod za prikaz podataka o profesoru.

Porukom obaveštavamo
kada je pozvan
konstruktor klase!!!
Nasleđivanje (inheritance)
 Klasa RazredniStaresina ima:
 svojstvo ImePrezime koje sadrži ime i prezime profesora,
 svojstvo Odeljenje koje pokazuje u kom je odeljenju taj profesor razredni
starešina
 konstruktor klase u kome se postavlja ime i prezime i odeljenje
 metod za prikaz podataka o profesoru.
Nasleđivanje (inheritance)
 Razredni staresina je takođe i profesor u školi i ima svoje ime i prezime, ali ima i
odeljenje kome je starešina.

 Razredni starešina je samo specijalan slučaj klase Profesor, tj. Ima sve osobine kao i
Profesor, ali i svoju specifičnu osobinu (odeljenje)

 Zato klasu RazredeniStaresina izvodimo iz klase Profesor

U definiciji izvedene klase iza naziva


klase navode se dve tačke iza kojih
sledi ime roditeljske (osnovne) klase

class IzvedenaKlasa : OsnovnaKlasa


Nasleđivanje (inheritance)

Poziv konstruktora osnovne klase!!!

 Konstruktor klase RazredniStaresina ima dva parametra:

 Prvi parametar (s1) se koristi kao parametar konstruktora osnovne klase i


inicijalizuje ime i prezime
 Drugi parametar (s2) se koristi u telu konstruktora izvedene klase za inicijalizaciju
odeljenja
Nasleđivanje (inheritance)
 Izvedena klasa NE nasleđuje konstruktor osnovne klase.

 Ako je definisan konstruktor u osnovnoj klasi, potrebno je definisati i konstruktor u


izvedenoj klasi.

 Konstruktor osnovne klase se može pozvati u konstruktoru izvedene klase korišćenjem


službene reči base.

 Na taj način ne moramo ponovo da pišemo telo konstruktora, već samo možemo da
unesemo dodatni kod u telo konstruktora izvedene klase i on će biti izvršen posle
izvršenja roditeljskog konstruktora.

 Ako se izostavi ključna reč base, poziva se default konstruktor roditeljske klase.
Nasleđivanje (inheritance)
 U glavom programu kreiramo jedan objekat klase Profesor i jedan objekat klase
RazredniStaresina

Objekat rs klase RazredniStaresina, ima


sva javna svojstva i metode roditeljske
klase (svojstvo ImePrezime i metod
Prikazi)
Nasleđivanje (inheritance)
Kada kreiramo objekat roditeljske klase,
poziva se konstruktor roditeljske klase.
Nasleđivanje (inheritance)
Kada kreiramo objekat izvedene klase,
pozivaju se oba konstruktora.
Prvo se poziva konstruktor roditeljske, pa
onda konstruktor izvedene klase.
Nasleđivanje (inheritance)
Metod Prikazi() nasleđen je iz klase
Profesor i on prikazuje samo ime i
prezime razrednog starešine.
Stoga dodajemo još jednu naredbu
kojom prikazujemo odeljenje.
Polimorfizam
 Zgodno bi bilo da sve potrebne informacije o profesoru dobijemo jednim pozivom
metode Prikazi()

 Zato ćemo u izvedenoj klasi RazredniStaresina predefinisati metodu Prikazi() i time


ćemo “pregaziti” (override) metodu iz osnovne klase Profesor

 Da bi ovo bilo moguće potrebno je u osnovnoj klasi, metod koji će kasnije biti
predefinisan, proglasiti virtualnim dodavanjem ključne reči virtual

 U izvedenoj klasi ključna reč override označava metod koji će da pregazi istoimeni
metod iz roditeljske klase.

 Predefinisani metod ima isti specifikator pristupa kao i originalni metod.


Polimorfizam

Virtualne metode su metode roditeljske klase koje mogu biti predefinisane


(“pregažene”) metodom iz izvedene klase u cilju da obezbede drugačiju funkcionalnost
metoda.
Polimorfizam

U izvedenoj klasi ključna reč override označava metod koji će da pregazi


istoimeni metod iz roditeljske klase.
Polimorfizam

Isti metod, različito ponašanje!!!


Polimorfizam
 Da je iz osnovne izvedena još neka klasa, metoda Prikazi() mogla bi se
predefinisati i u drugim izvedenim klasama na neki drugi način.

 Dakle, programer može da klase u istoj hijerarhiji nasleđivanja, po potrebi,


donekle izmeni ili adaptira.

 Tj. kada u izvedenoj klasi predefinišemo neku metodu (override) dobili smo da
se jedna ista metoda ponaša na više različitih načina.

 Ova osobina naziva se POLIMORFIZAM (grčki: “poly” – više, “morph” – oblik)


Polimorfizam
 (kao i kod konstruktora) Ključnom reči base možemo pozvati originalni
virtualni metod unutar predefinisanog (override) metoda.

 U tom slučaju prvo će se izvršiti originalni metod, pa će se potom izvršiti i


dodatne naredbe predefinisanog metoda.
PITANJE:

Šta radi metod Prikaz() ?

Šta će biti prikazano iz klase


Roditelj, a šta iz klase Dete?
PITANJE:

Šta u ovom slučaju očekujemo


na izlazu?
Klasifikator pristupa protected
 Šta označavaju klasifikatlori pristupa private, public i internal?

 Specifikator pristupa protected da se članu klase koji obeležen kao protected može
pristupiti samo unutar te klase ili unutar izvedenih klasa koje nasleđuju datu klasu.

Dostupnost public private protected

Unutar klase DA DA DA

Van klase DA NE NE

Unutar izvedenih klasa DA NE DA


using System;
namespace Primer Imajući u vidu
{
public class Roditelj //osnovna klasa klasifikatore pristupa,
{
private int sirina = 10;
koje linije koda će
protected int duzina = 10; izazvati grešku?
public int visina = 10;
}
public class Dete : Roditelj //izvedena klasa
{
public Dete() //konstruktor izvedene klase
{
sirina = 100;
duzina = 100;
visina = 100;
}
}
class Program
{
static void Main(string[] args)
{
Roditelj r = new Roditelj();
r.sirina = 1000;
r.duzina = 1000;
r.visina = 1000;
}
}
}
Zadatak
Kreirati klase:

 Pravougaonik:
 Zaštićena polja duzina i sirina,
 Javna svojstva za postavljanje i čitanje privatnih atributa
 Konstruktor klase kojim se inicijalizuju vrednosti stranica pravougaonika
 Metod Ispis za prikaz stranica,
 Metod Povrsina koji računa površinu pravougaonika.

 Klasa Kvadar koja nasleduje klasu Pravougaonik ima:


 Pored nasleđenih polja duzina i sirina i dodatno privatno polje visina,
 Javno svojstvo za postavljanje i čitanje vrednosti polja visina,
 Konstruktor klase kojim se inicijalizuju vrednosti stranica kvadra
 Predefinisani metod osnovne klase Ispis ispisuje stranice kvadra
 Predefinisani metod osnovne klase Povrsina računa površinu kvadra
 Metod Zapremina za računanje zapremine kvadra.

* U glavnom programu kreirati jedan objekat klase Pravougaonik i prikazati


njegove dimenzije i površinu. Posle toga kreirati jedan kvadar i prikazati njegove
stranice, površinu i zapreminu.

You might also like