U objektno orijentisanom programiranju, klasa predstavlja šablon na osnovu koga se kreiraju objekti. Da bi objekat mogao da se koristi, mora biti pravilno inicijalizovan, odnosno njegova polja i svojstva moraju dobiti početne vrednosti. Za tu svrhu koriste se konstruktori.

Kada se koristi nasleđivanje, situacija postaje složenija, jer objekat izvedene klase u sebi sadrži i deo koji je nasledio od  bazne (osnovne) klase. Zbog toga se prilikom kreiranja objekta izvedene klase uvek mora inicijalizovati i deo koji je nasleđen od bazne klase, što se radi pozivanjem konstruktora bazne klase, bilo implicitno, bilo eksplicitno.


Pojam konstruktora - da ponovimo

Konstruktor je specijalna metoda klase koja:

  • ima isto ime kao klasa,
  • nema povratnu vrednost (čak ni void),
  • automatski se poziva prilikom kreiranja objekta pomoću operatora new.

Primer jednostavnog konstruktora:

class Osoba
{
    public string Ime;

    public Osoba()
    {
        Ime = "Nepoznato";
    }
}

Kada se izvrši naredba:

Osoba o = new Osoba();

automatski se poziva konstruktor klase Osoba.


Konstruktori i nasleđivanje

Kada klasa nasleđuje drugu klasu, dobija njene članove (polja, metode, svojstva), ali ne nasleđuje konstruktore.
Međutim, konstruktor bazne klase se uvek izvršava prilikom kreiranja objekta izvedene klase.

Primer:

class Osoba
{
    public Osoba()
    {
        Console.WriteLine("Pozvan konstruktor klase Osoba");
    }
}

class Ucenik : Osoba
{
    public Ucenik()
    {
        Console.WriteLine("Pozvan konstruktor klase Ucenik");
    }
}

Ako se u Main metodi napiše:

Ucenik u = new Ucenik();

Izlaz će biti:

Pozvan konstruktor klase Osoba
Pozvan konstruktor klase Ucenik

👉 Zaključak:  Prvo se uvek poziva konstruktor bazne klase, a zatim konstruktor izvedene klase.


Implicitno pozivanje konstruktora bazne klase

Ako bazna klasa ima konstruktor bez parametara, on se automatski poziva, čak i ako to nije eksplicitno navedeno u izvedenoj klasi, prilikom kreiranja objekta izvedene klase pomoću konstruktora bez parametara. To je moglo da se vidi u prethodnom primeru, a u nastavku je još jedan sličan primer:

class Vozilo
{
    public Vozilo()
    {
        Console.WriteLine("Kreirano vozilo");
    }
}

class Automobil : Vozilo
{
    public Automobil()
    {
        Console.WriteLine("Kreiran automobil");
    }
}

U ovom slučaju, podrazumeva se sledeće:

public Automobil() : base()
{
}

Pozivanje konstruktora bazne klase pomoću base

Ako želimo da prosledimo vrednosti baznoj klasi, odnosno da pozovemo konstruktor bazne klase, koristi se ključna reč base.

Primer:

class Osoba
{
    public string Ime;

    public Osoba(string ime)
    {
        Ime = ime;
    }
}

class Ucenik : Osoba
{
    public int Razred;

    public Ucenik(string ime, int razred) : base(ime)
    {
        Razred = razred;
    }
}

Kreiranje objekta:

Ucenik u = new Ucenik("Marko", 3);

Ovde:

  • base(ime) prosleđuje vrednost konstruktoru bazne klase

  • konstruktorom bazne klase se inicijalizuje polje Ime

  • konstruktorom izvedene klase se inicijalizuje polje Razred


Obavezno pozivanje konstruktora bazne klase

Ako bazna klasa nema konstruktor bez parametara, a u izvedenoj klasi se na primer kreira objekat komoću konstruktora bez parametara, i ako se ne navede base(...),  dolazi do greške pri kompajliranju ! To je zbog toga što onda kompajler posrazumevano prvo poziva konstruktor bazne klase, a tek onda konstruktor izvedene klase ...  

Primer u kojem će da dođe do greške:

class A
{
    public A(int x)
    {
    }
}

class B : A
{
    public B()
    {
    }
}

❌ Greška:  Ne postoji konstruktor bez parametara u klasi A

✔ Ispravno bi bilo:

class B : A
{
    public B() : base(5)
    {
    }
}

Redosled izvršavanja konstruktora u hijerarhiji klasa

Ako postoji više nivoa nasleđivanja, konstruktori se pozivaju:

  1. od najviše bazne klase

  2. ka najnižoj izvedenoj klasi

Primer:

class A
{
    public A()
    {
        Console.WriteLine("A");
    }
}

class B : A
{
    public B()
    {
        Console.WriteLine("B");
    }
}

class C : B
{
    public C()
    {
        Console.WriteLine("C");
    }
}

Kreiranje objekta:

C obj = new C();

Izlaz:

A
B
C

Primeri za vežbu

Zadatak:  Napraviti baznu klasu Zaposleni koja ima:

  • polje Ime

  • konstruktor koji prima ime

Napraviti izvedenu klasu Profesor koja ima:

  • polje Predmet

  • konstruktor koji prima ime i predmet

Rešenje:

class Zaposleni
{
    public string Ime;

    public Zaposleni(string ime)
    {
        Ime = ime;
    }
}

class Profesor : Zaposleni
{
    public string Predmet;

    public Profesor(string ime, string predmet)
        : base(ime)
    {
        Predmet = predmet;
    }
}

Zadaci za samostalan rad

Zadatak 1:  Napraviti baznu klasu Uredjaj sa poljem Proizvodjac i konstruktorom koji prima proizvođača. Zatim napraviti izvedenu klasu Telefon sa poljem Model.

  <-- -->


Zadatak 2: Napraviti tri klase u hijerarhiji: Osoba, Ucenik, Maturant. U svakoj klasi ispisati poruku u konstruktoru i proveriti redosled poziva.

  <-- -->


Zaključak

Konstruktori izvedenih klasa omogućavaju pravilnu inicijalizaciju objekata u hijerarhiji nasleđivanja. 

  • konstruktori se ne nasleđuju, ali se uvek pozivaju

  • prvo se izvršava konstruktor bazne klase

  • ključna reč base služi za pozivanje konstruktora bazne klase

Last modified: Friday, 6 February 2026, 5:05 PM