16.01. NASLEĐIVANJE: Izvedene klase, upotreba njihovih članova i konstruktori
I deo – DEFINICIJA IZVEDENE KLASE
U dosadašnjem radu učenici su se upoznali sa pojmom klase i objekta. Naučili su da klasa predstavlja model ili šablon, dok je objekat konkretna realizacija tog šablona. Međutim, u realnim programima često imamo više klasa koje su međusobno povezane i koje dele zajedničke osobine.
Da bismo izbegli ponavljanje istog koda, koristimo jedan od osnovnih principa objektno orijentisanog programiranja – nasleđivanje.
1. Šta je nasleđivanje?
Nasleđivanje omogućava da jedna klasa preuzme (nasledi) osobine i ponašanja druge klase.
-
Bazna (osnovna) klasa – klasa od koje se nasleđuje
-
Izvedena klasa – klasa koja nasleđuje
Na ovaj način smanjujemo količinu koda, program je pregledniji i lakše se održava i proširuje.
2. Primer iz stvarnog života
Posmatrajmo sledeću situaciju:
Svaka osoba ima ime i prezime.
Učenik je osoba, ali dodatno ima razred i odeljenje
👉 Učenik JE osoba, ali ima dodatne osobine.
3. Definicija bazne klase
Prvo ćemo da napravimo Console Application i u njoj da kreiramo klasu Osoba:
class Osoba
{
public string Ime;
public string Prezime;
public void PredstaviSe()
{
Console.WriteLine("Ja sam " + Ime + " " + Prezime);
}
}
Ova klasa opisuje svaku osobu.
4. Definicija izvedene klase
Izvedena klasa se definiše pomoću znaka : (dvotačka) a zatim sledi ime osnovne klase iz koje je izvedena.
class Ucenik : Osoba
{
public int Razred;
}
Klasa Ucenik:
-
AUTOMATSKI dobija
Ime -
AUTOMATSKI dobija
Prezime -
AUTOMATSKI dobija metodu
PredstaviSe()
5. Hijerarhija klasa
Grupa klasa koje su povezane nasleđivanjem formiraju strukturu koja se naziva hijerarhija klasa.
Osoba
|
└── Ucenik
Izvedena klasa nasleđuje sve članove bazne klase.
-- bazna klasa je super klasa ili nadređena klasa.
-- izvedena klasa je podklasa ili podređena klasa (klasa koja nasleđuje baznu klasu).
- Jednu baznu klasu može da nasledi više izvedenih klasa (broj izvedenih klasa je neograničen).
Izvedena klasa nasleđuje sve osim konstruktora i destruktora bazne klase.
Zadatak 1: Napraviti baznu klasu Vozilo sa atributima Marka i Brzina.
Zadatak 2: Napraviti izvedenu klasu Automobil koja ima atribut BrojVrata.
class Vozilo
{
public string Marka;
public int Brzina;
}
class Automobil : Vozilo
{
public int BrojVrata;
}
II deo – UPOTREBA ČLANOVA IZVEDENE KLASE
1. Korišćenje nasleđenih članova
Izvedena klasa može da koristi atribute i metode koje su definisane u baznoj klasi.
2. Primer korišćenja objekta izvedene klase
static void Main(string[] args)
{
Ucenik u = new Ucenik();
u.Ime = "Marko";
u.Prezime = "Marković";
u.Razred = 3;
u.PredstaviSe();
Console.WriteLine("Razred: " + u.Razred);
Console.ReadLine();
}
👉 Iako Ime i Prezime nisu definisani u klasi Ucenik, mogu se koristiti jer su nasleđeni.
3. Pristupni modifikatori (kratko objašnjenje)
-
public– dostupno svuda -
private– dostupno samo u istoj klasi -
protected– dostupno u izvedenim klasama
Primer:
class Osoba
{
protected int GodinaRodjenja;
}
👉 GodinaRodjenja je dostupna u klasi Ucenik, ali ne i iz Main metode.
4. Dodavanje nove metode u izvedenoj klasi
class Ucenik : Osoba
{
public int Razred;
public void PrikaziPodatke()
{
Console.WriteLine(Ime + " " + Prezime + ", razred " + Razred);
}
}
Zadatak 3: U klasi Vozilo dodati metodu PokreniSe().
Zadatak 4: U klasi Automobil dodati metodu PrikaziInfo() koja ispisuje sve podatke.
class Vozilo
{
public string Marka;
public int Brzina;
public void PokreniSe()
{
Console.WriteLine("Vozilo se pokreće.");
}
}
class Automobil : Vozilo
{
public int BrojVrata;
public void PrikaziInfo()
{
Console.WriteLine("Marka: " + Marka);
Console.WriteLine("Brzina: " + Brzina);
Console.WriteLine("Broj vrata: " + BrojVrata);
}
}
III deo – KONSTRUKTORI IZVEDENIH KLASA
1. Šta je konstruktor?
Konstruktor je posebna metoda koja ima isto ime kao klasa, automatski se poziva pri stvaranju objekta i služi za inicijalizaciju podataka
2. Konstruktor bazne klase
class Osoba
{
public string Ime;
public string Prezime;
public Osoba(string ime, string prezime)
{
Ime = ime;
Prezime = prezime;
}
}
3. Problem bez konstruktora izvedene klase
Ako bazna klasa ima konstruktor sa parametrima, izvedena klasa ga mora pozvati.
4. Konstruktor izvedene klase i base
class Ucenik : Osoba
{
public int Razred;
public Ucenik(string ime, string prezime, int razred)
: base(ime, prezime)
{
Razred = razred;
}
}
👉 base poziva konstruktor bazne klase.
5. Korišćenje u Main metodi
static void Main(string[] args)
{
Ucenik u = new Ucenik("Ana", "Petrović", 3);
u.PredstaviSe();
Console.WriteLine("Razred: " + u.Razred);
Console.ReadLine();
}
Zadatak 5: Napraviti klasu Vozilo sa konstruktorom (marka, brzina).
Zadatak 6: Napraviti klasu Automobil sa konstruktorom koji poziva bazni konstruktor.
< - - >
....