Nasleđivanje, polimorfizam i interfejsi – primeri (Java)

Strana 4 od 4 · Objektno programiranje – primeri

Zadaci u kojima više klasa deli zajedničke osobine: osnovna klasa, izvedene klase koje je proširuju i menjaju (@Override), apstraktne klase i interfejsi.

Osnovna ideja nasleđivanja:

abstract class Oblik {                 // apstraktna klasa – ne može new Oblik()
    abstract double povrsina();        // svaka izvedena klasa MORA da je napiše
}

class Krug extends Oblik {             // Krug JE Oblik
    double r;
    Krug(double r) { this.r = r; }
    @Override
    double povrsina() { return r * r * Math.PI; }
}

Oblik o = new Krug(2);                 // promenljiva tipa Oblik, objekat tipa Krug
System.out.println(o.povrsina());      // poziva se metoda iz klase Krug (polimorfizam)
Pre nego što počneš: pročitaj lekcije Nasleđivanje klasa, Apstraktne klase i interfejsi.
Kako da vežbaš: napiši klasu i program sam/a, pokreni ga na primeru iz zadatka, pa tek onda otvori uputstvo, a na kraju rešenje. Sva rešenja su u Javi; pomoćne klase su u istom fajlu (bez reči public), pa se program pokreće kao jedan fajl.
ZADATAK 01Težina: Srednje teško

Geometrijski oblici

Napravi apstraktnu klasu Oblik sa apstraktnim metodama povrsina() i naziv(), i izvedene klase Krug, Pravougaonik i Trougao. Učitaj n oblika (oznaka K r, P a b ili T a h), čuvaj ih u jednom nizu tipa Oblik[], ispiši površinu svakog i ukupnu površinu.

Primer

Ulaz

3
K 1
P 2 3
T 4 5

Izlaz

Krug: 3.14
Pravougaonik: 6.00
Trougao: 10.00
Ukupno: 19.14
ZADATAK 02Težina: Srednje teško

Radnik i šef (super)

Klasa Radnik ima ime i osnovnu platu i metodu plata(). Klasa Sef extends Radnik ima još i broj ljudi u timu, a plata šefa je osnovna plata + 2000 dinara za svakog člana tima. Napravi konstruktore (šef poziva super) i ispiši plate jednog radnika i jednog šefa.

Primer

Ulaz

Pera 60000
Mara 80000 5

Izlaz

Pera: 60000
Mara (sef tima od 5): 90000
ZADATAK 03Težina: Lako

Životinje u zoo vrtu

Osnovna klasa Zivotinja ima ime i metodu glas() koja vraća „…“. Klase Pas, Macka i Krava preklapaju metodu glas(). U listi ArrayList<Zivotinja> napravi nekoliko životinja i za svaku ispiši ime i glas.

Primer

Izlaz

Reks kaze: Av-av!
Mica kaze: Mjau!
Milka kaze: Muuu!
Riba Nemo kaze: ...
ZADATAK 04Težina: Teže

Interfejs: uređaji koji se pune

Napravi interfejs Punjiv sa metodama napuni(int minuta) i baterija() (procenat 0–100). Klasa Telefon se puni 2% u minuti, a klasa Laptop 1% u minuti. Baterija ne može preći 100%. Za telefon sa 35% i laptop sa 50% učitaj broj minuta punjenja i ispiši stanje baterija.

Primer

Ulaz

40

Izlaz

Telefon: 100%
Laptop: 90%
ZADATAK 05Težina: Teže

Comparable: sortiranje sportista

Klasa Sportista (ime, rezultat u sekundama na 100 m) implementira interfejs Comparable<Sportista> tako da je „manji“ onaj sa boljim (manjim) vremenom. Učitaj n sportista, sortiraj ih sa Collections.sort i ispiši poredak sa medaljama za prva tri mesta.

Primer

Ulaz

4
Luka 12.40
Nina 11.95
Petar 12.10
Sara 12.85

Izlaz

zlato: Nina 11.95
srebro: Petar 12.1
bronza: Luka 12.4
4. Sara 12.85
Česte greške i saveti
  • Izvedena klasa nasleđuje atribute i metode, a konstruktor osnovne klase poziva sa super(...) kao prvom naredbom.
  • @Override nije obavezan, ali je koristan: prevodilac javlja grešku ako se ime metode ne poklapa sa metodom osnovne klase.
  • Polimorfizam: u nizu tipa Oblik[] mogu biti i krugovi i pravougaonici – svaki odgovara „na svoj način“ na isti poziv.
  • Klasa nasleđuje samo jednu klasu (extends), ali može da implementira više interfejsa (implements A, B).

Proveri znanje

Otvori kviz

Mini kviz: nasleđivanje

1. Kojom rečju klasa nasleđuje drugu klasu?




2. Šta znači da je klasa abstract?




3. Promenljiva Oblik o = new Krug(2); poziva o.povrsina(). Koja metoda se izvršava?