14 UNUTRANJE I ANONIMNE KLASE 1 definicija Unutranja

  • Slides: 11
Download presentation
14 UNUTRAŠNJE I ANONIMNE KLASE 1

14 UNUTRAŠNJE I ANONIMNE KLASE 1

definicija • Unutrašnja (inner) klasa je klasa koja je član druge (tzv. "spoljašnje") klase

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

sintaksa • definiše se kao i svaka druga klasa class Naziv. Klase {. .

sintaksa • definiše se kao i svaka druga klasa class Naziv. Klase {. . . . } 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

UML Spoljašnja. Klasa Unutrašnja. Klasa 4

UML Spoljašnja. Klasa Unutrašnja. Klasa 4

primer • za primer spregnutog reda: kako onemogućiti bilo kakav pristup članovima liste koji

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 <<interface>> Queue T Linked. Queue T java. util: : Linked. List {abstract} U PLinked. Queue instancira se preko ovog sam red je ovde 5

import java. util. Linked. List; public abstract class Linked. Queue { public static <V>

import java. util. Linked. List; public abstract class Linked. Queue { public static <V> Queue<V> make. Queue() { return new PLinked. Queue<V>(); } private static class PLinked. Queue<U> extends Linked. List<U> implements Queue<U> { public void put(U element) { add. Last(element); } public U get() { return is. Empty() ? null : get. First(); unutrašnja klasa } public U remove() { return remove. First(); } public boolean is. Full() { return false; } } } 6

instanciranje • klasa Linked. Queue instancira se tako što se, ustvari, kreira objekat unutrašnje

instanciranje • klasa Linked. Queue instancira se tako što se, ustvari, kreira objekat unutrašnje klase PLinked. Queue • 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 make. Queue: Queue<String> q = Linked. Queue. make. Queue(); 7

Anonimne klase • bezimene klase koje se definišu i instanciraju istovremeno • najčešće se

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

UML • u UML se prikazuju upisivanjem stereotipa <<Anonimous>> na mesto naziva klase i

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

<<interface>> An. Interface Class. With. Anonimous <<Anonimous>> 10

<<interface>> An. Interface Class. With. Anonimous <<Anonimous>> 10

public interface An. Interface { void inc(); void dec(); } //Klasa sa anonimnom unutrasnjom

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