You are on page 1of 26

BILD-IT

LEKCIJA 9: NASLJEĐIVANJE & POLIMORFIZAM


PONAVALJANJE

Šta je to klasa, šta je to objekt?

Stanja objekta vs. ponašanja objekta?

Šta su to konstruktori, za šta nam služe?


PONAVALJANJE

Koji return tip konstruktori koriste?

Kako pristupiti metodama i podacima objekta?

Objektni vs. klasni članovi? (instance vs. static)


PONAVALJANJE

Koji su to modifikatori vidljivosti/pristupa?

Šta je to enkapsulacija?

Šta su to getteri a šta setteri?


NASLJEĐIVANJE

OOP nam dozvoljava da definišemo nove klase iz već postojećih klasa.

Ova mogućnost → nasljeđivanje, inheritance.

Jedan od stubova OOP, odlična stvar sa aspekta reusability-a.


NASLJEĐIVANJE
Različite klase mogu imati zajednička stanja i ponašanja koja možemo
generalizovati u jednoj klasi i dijeliti među njima.

Iz generalizovane klase možemo, po potrebi, proširiti specijalizovanu


klasu koja će nasljediti zajednička stanja i ponašanja.
NASLJEĐIVANJE

Generalizovana klasa / parent → Superklasa


Specijalizovana klasa / child → Subklasa

Primjer: User / Admin / Regular / Test.java


NASLJEĐIVANJE
Subklasa nasljeđuje sve public članove klase od superklase te, po
potrebi, definiše nove.

Ključna riječ: extends.

public class Admin extends User


VAŽNO

Subklasa nije podskup superklase. Češće nego ne → subklasa sadrži više


članova i informacija nego superklasa.

Private članovi superklase nisu dostupni van superklase te im subklasa


nema pristup.
OBJECT KLASA

Klasa koja živi na vrhu klasne hijerarhije u Javi.

Sve klase su, direktno ili indirektno, subklase Object klase.

Svaka klasa koju napišemo nasljeđuje metode definisane ovom klasom.


SUPER
Za razliku od stanja i ponašanja, subklase ne nasljeđuju konstruktore.

Ukoliko želimo pozvati konstruktore super klase → super.

Poziv na konstruktor superklase mora biti prva linija u konstruktoru


subklase.
CONSTRUCTOR CHAINING
Kada kreiramo objekt iz neke klase, svi konstruktori superklasa u lancu
nasljeđivanja bivaju pozvani.

Prilikom inicijaliziranja objekta subklase, konstruktor subklase prvo


poziva konstruktor superklase pa tek onda izvršava svoje radnje.

Uvijek ostaviti no-args konstruktor u klasama.


METHOD OVERRIDING
Pored poziva konstruktora superklase, super ključnu riječ možemo
koristiti i za poziv drugih public metoda superklase.

U nekim situacijama, subklasa treba promijeniti ponašanje metode


definisane u superklasi.

Ovo promjena → method overriding.


METHOD OVERRIDING
Da bi overridali metodu ista mora biti definisana u subklasi sa istim
potpisom i return tipom.

PRIMJER: User / Admin / Regular / Test.java

Klasne metode NE MOGU biti overridane.


METHOD OVERRIDING
Method overloading != Method overriding.

Da minimiziramo zbunjolu, koristimo override annotaciju.

@Override
potpis metode koju overridamo
POLIMORFIZAM

Tri stuba OOP: enkapsulacija, nasljeđivanje i polimorfizam.

Supertip → tip definisan superklasom.

Subtip → tip definisan subklasom.


POLIMORFIZAM
Nasljeđivanje omogućava subklasi da nasljedi članove superklase.

Subklasa je specijaliziacija svoje klase; svaka instanca subklase je


također i instanca svoje superklase ali ne i obratno.

Svaki admin je user ali svaki user nije admin.


POLIMORFIZAM
Polimorfizam → varijabla supertipa može pokazivati na objekt subtipa.

Polimorfizam (“mnogo oblika”) → objekt subklase može biti korišten


umjesto objekta superklase.

PRIMJER: Animal / Cat / Dog / Test.java


BINDING
Asocijacija poziva metoda sa tijelom metode se naziva binding.

Kao što smo vidjeli, metoda može biti implementirana u više klasa duž
lanca nasljeđivanja.

Kako JVM zna koju implementaciju pozvati?


BINDING
2 bitna termina: deklarisani i stvarni tip.

Deklarisani tip → tip deklarisane varijable.


Stvarni tip → tip objekta na koji deklarisana varijabla pokazuje.

Animal animal = new Cat();


BINDING
2 tipa bindinga:

1. Dynamic (late, runtime) binding


2. Static (early, compile-time) binding.

Sve static, private i final metode → static binding jer ne mogu biti
overridane.
ARRAYLIST KLASA

ArrayList objekt možemo koristiti za spremanje liste objekata.

Niz → fiksna veličina, ArrayList → dinamičan.

ArrayList<> gradovi = new ArrayList<>();


ARRAYLIST VS ARRAY

PRIMJER: ArrayListPrimjer.java
PROTECTED MODIFIER
Do sada smo vidjeli kako koristiti public, private i default modifier.

Protected → kada želimo dozvoliti subklasi da pristupi članovima


superklase bez da dozvolimo pristup drugim klasama van lanca nasljeđ.

Protected članu možemo pristupiti iz subklase.


FINAL
Ukoliko želimo spriječiti proširivanje klasa, koristimo final modifier da
označimo da je klasa finalna i da ne može biti proširena.

public final class ImeKlase { }

Ukoliko želimo da spriječimo method overriding → finalna metoda.


ZADATAK

Krenuti sa radom na Biblioteka ili Bankomat projektu.

You might also like