Presentation is loading. Please wait.

Presentation is loading. Please wait.

14 UNUTRAŠNJE I ANONIMNE KLASE

Similar presentations


Presentation on theme: "14 UNUTRAŠNJE I ANONIMNE KLASE"— Presentation transcript:

1 14 UNUTRAŠNJE I ANONIMNE KLASE

2 definicija Unutrašnja (inner) klasa je klasa koja je član druge (tzv. "spoljašnje") klase kao član, ni po čemu se ne razlikuje od drugih članova (polja, metoda): može biti nestatička ili statička važe sva četiri nivoa kontrole pristupa spoljašnja klasa je u potpunosti otvorena za metode unutrašnje klase i obrnuto može se, čak, definisati i unutar metode služi, najčešće, za interne potrebe spoljašnje klase 2

3 sintaksa definiše se kao i svaka druga klasa  class NazivKlase {
} s tim što se naredba class u celosti nalazi unutar naredbe class spoljašnje klase (ili unutar metode, ako je klasa unutrašnja za metodu) 3

4 UML SpoljašnjaKlasa UnutrašnjaKlasa 4

5 primer za primer spregnutog reda: kako onemogućiti bilo kakav pristup članovima liste koji su sadržani u klasi Queue? ne može se instancirati T <<interface>> Queue LinkedQueue {abstract} java.util::LinkedList PLinkedQueue T U instancira se preko ovog sam red je ovde 5

6 unutrašnja klasa import java.util.LinkedList;
public abstract class LinkedQueue { public static <V> Queue<V> makeQueue() { return new PLinkedQueue<V>(); } private static class PLinkedQueue<U> extends LinkedList<U> implements Queue<U> { public void put(U element) { addLast(element); public U get() { return isEmpty() ? null : getFirst(); public U remove() { return removeFirst(); public boolean isFull() { return false; unutrašnja klasa 6

7 Queue<String> q = LinkedQueue.makeQueue();
instanciranje klasa LinkedQueue instancira se tako što se, ustvari, kreira objekat unutrašnje klase PLinkedQueue pošto je unutrašnja klasa statička, a spoljašnja apstraktna (te se ne može instancirati), instanciranje reda izvodi se primenom statičke metode makeQueue: Queue<String> q = LinkedQueue.makeQueue(); 7

8 new Klasa_ili_Interfejs() {opis anonimne klase}
bezimene klase koje se definišu i instanciraju istovremeno najčešće se koriste pri formiranju rezultata metode, kada je on objekat anonimne klase objekat anonimne klase formira se izrazom new Klasa_ili_Interfejs() {opis anonimne klase} gde je Klasa_ili_Interfejs koju anonimna klasa nasleđuje odn. implementira 8

9 UML u UML se prikazuju upisivanjem stereotipa <<Anonimous>> na mesto naziva klase i vezivanjem za datu klasu vezom "biti unutrašnja klasa" 9

10 <<interface>> AnInterface
ClassWithAnonimous <<Anonimous>> 10

11 public interface AnInterface {
void inc(); void dec(); } //Klasa sa anonimnom unutrasnjom klasom public class ClassWithAnonimous { private int x; ClassWithAnonimous() { x = 0; public int get() { return x;   //Metoda sa unutrasnjom klasom koja konkretizuje AnInterface public AnInterface value() { return new AnInterface() { public void inc() { x++; public void dec() { x--; }; definisanje i instanciranje anonimne klase koja implementira interfejs AnInterface 11


Download ppt "14 UNUTRAŠNJE I ANONIMNE KLASE"

Similar presentations


Ads by Google