🔹 Prvi deo – Nasleđivanje, konstruktori, modifikatori pristupa


 ZADATAK 1 – Osnovno nasleđivanje

Napraviti klasu Osoba sa sledećim članovima:

  • protected polja: ime, prezime
  • public konstruktor koji prima ime i prezime
  • public metodu PrikaziPodatke() koja ispisuje ime i prezime

Napraviti izvedenu klasu Ucenik koja:

  • nasleđuje klasu Osoba
  • ima dodatno privatno polje odeljenje
  • ima konstruktor koji prima ime, prezime i odeljenje
  • redefiniše metodu PrikaziPodatke() tako da ispisuje i odeljenje

U Main metodi:

  • kreirati objekat klase Ucenik
  • pozvati metodu za prikaz podataka

using System;

class Osoba
{
    protected string ime;
    protected string prezime;

    public Osoba(string ime, string prezime)
    {
        this.ime = ime;
        this.prezime = prezime;
    }

    public virtual void PrikaziPodatke()
    {
        Console.WriteLine("Ime: {0} {1}", ime, prezime);
    }
}

class Ucenik : Osoba
{
    private string odeljenje;

    public Ucenik(string ime, string prezime, string odeljenje)
        : base(ime, prezime)
    {
        this.odeljenje = odeljenje;
    }

    public override void PrikaziPodatke()
    {
        base.PrikaziPodatke();
        Console.WriteLine("Odeljenje: " + odeljenje);
    }
}

class Program
{
    static void Main()
    {
        Ucenik u = new Ucenik("Marko", "Markovic", "III-2");
        u.PrikaziPodatke();
        Console.ReadLine();
    }
}

Pitanja za razmišljanje:
  1. Zašto polja u baznoj klasi nisu private?
  2. Šta bi se desilo da su private?
  3. Da li izvedena klasa može direktno pristupiti private članovima bazne klase?

  1. Zato što izvedena klasa mora imati pristup tim poljima.

  2. Izvedena klasa ne bi mogla da im pristupi.

  3. Ne. Samo protected i public članovima.


ZADATAK 1a – dodatak 

Napraviti klasu Adresa:

  • ulica
  • broj
  • metoda PrikaziAdresu()

Izmeniti klasu Osoba tako da sadrži objekat klase Adresa.

Kroz konstruktor proslediti podatke i inicijalizovati adresu.

class Adresa
{
    private string ulica;
    private int broj;

    public Adresa(string ulica, int broj)
    {
        this.ulica = ulica;
        this.broj = broj;
    }

    public void PrikaziAdresu()
    {
        Console.WriteLine("Adresa: {0} {1}", ulica, broj);
    }
}

class Osoba
{
    protected string ime;
    protected string prezime;
    protected Adresa adresa;

    public Osoba(string ime, string prezime, string ulica, int broj)
    {
        this.ime = ime;
        this.prezime = prezime;
        adresa = new Adresa(ulica, broj);
    }

    public virtual void PrikaziPodatke()
    {
        Console.WriteLine("Ime: {0} {1}", ime, prezime);
        adresa.PrikaziAdresu();
    }
}

🔹 Drugi deo – Apstraktne klase i interfejsi

ZADATAK 2 – Apstraktna klasa

Napraviti apstraktnu klasu Zaposleni:

  • protected ime
  • apstraktnu metodu IzracunajPlatu()
  • metodu PrikaziIme()

Napraviti klase:

  • Programer (plata = broj sati × satnica)
  • Menadzer (fiksna plata)

abstract class Zaposleni
{
    protected string ime;

    public Zaposleni(string ime)
    {
        this.ime = ime;
    }

    public void PrikaziIme()
    {
        Console.WriteLine("Zaposleni: " + ime);
    }

    public abstract double IzracunajPlatu();
}

class Programer : Zaposleni
{
    private int sati;
    private double satnica;

    public Programer(string ime, int sati, double satnica)
        : base(ime)
    {
        this.sati = sati;
        this.satnica = satnica;
    }

    public override double IzracunajPlatu()
    {
        return sati * satnica;
    }
}

class Menadzer : Zaposleni
{
    private double plata;

    public Menadzer(string ime, double plata)
        : base(ime)
    {
        this.plata = plata;
    }

    public override double IzracunajPlatu()
    {
        return plata;
    }
}

ZADATAK 3 – Interfejs

Napraviti interfejs ILogovanje sa metodom PrijaviSe().

Implementirati interfejs u klasama:

  • Administrator

  • Korisnik

interface ILogovanje
{
    void PrijaviSe();
}

class Administrator : ILogovanje
{
    public void PrijaviSe()
    {
        Console.WriteLine("Administrator se prijavio.");
    }
}

class Korisnik : ILogovanje
{
    public void PrijaviSe()
    {
        Console.WriteLine("Korisnik se prijavio.");
    }
}

🔥 Zadatak (za vežbu kod kuće)

Napraviti mini sistem škole. Tu bi trebalo da postoje:

  • Apstraktna klasa Osoba

  • Izvedene klase Ucenik i Profesor

  • Interfejs IPodaci

  • Statička klasa SkolaStatistika

  • Lista tipa List<Osoba>

  • Polimorfno pozivanje metoda

Last modified: Friday, 27 February 2026, 6:18 PM