Java - Anonimna klasa (Anonymous Class)


U ovoj lekciji ćete naučiti o anonimnim klasama u Javi uz pomoć primjera. U Javi klasa može da sadrži drugu klasu poznatu kao ugnježdena klasa. Moguće je stvoriti ugnježdenu klasu bez davanja imena. Ugnježdena klasa koja nema ime poznata je kao anonimna klasa. Anonimna klasa mora biti definisana unutar druge klase. Zbog toga je poznata i kao anonimna unutrašnja klasa. Sintaksa anonimne klase je:

class outerClass {

    // Definisanje anonimne klase
    object1 = new Type(parameterList) {
         // Tijelo anonimne klase
    };
}

Anonimne klase obično proširuju potklase ili implementuju interfejs. Ovdje Type može biti:

  • Superklasa koju anonimna klasa proširuje
  • Interfejs koji implementuje anonimna klasa

Gornji kod stvara object, object1, anonimne klase za vrijeme izvođenja.


Primjer 1: Anonimna klasa - proširenje klase

class Polygon {
   public void display() {
      System.out.println("Unutar klase Polygon");
   }
}

class AnonymousDemo {
   public void createClass() {

      // Kreiranje anonimne klase koja proširuje klasu Polygon
      Polygon p1 = new Polygon() {
         public void display() {
            System.out.println("Unutar anonimne klase.");
         }
      };
      p1.display();
   }
}

class Main {
   public static void main(String[] args) {
       AnonymousDemo an = new AnonymousDemo();
       an.createClass();
   }
}

U gornjem primjeru kreirali smo klasu Polygon. Ima prikaz metode display(). Zatim smo kreirali anonimnu klasu koja proširuje klasu Polygon i poništava metodu display(). Kada pokrenemo program, stvara se objekt p1 anonimne klase. Objekt tada poziva metodu display() anonimne klase.


Primjer 2: Anonimna klasa - implementovanje interfejsa

interface Polygon {
   public void display();
}

class AnonymousDemo {
   public void createClass() {

      // Interfejs za implementaciju anonimne klase
      Polygon p1 = new Polygon() {
         public void display() {
            System.out.println("Unutar anonime klase.");
         }
      };
      p1.display();
   }
}

class Main {
   public static void main(String[] args) {
      AnonymousDemo an = new AnonymousDemo();
      an.createClass();
   }
}

U gornjem primjeru stvorili smo anonimnu klasu koja implementuje Polygon interfejs.



Prednosti anonimnih klasa

U anonimnim klasama, objekti se stvaraju kad god su potrebni. Odnosno, objekti su stvoreni za obavljanje određenih zadataka. Pogledajmo primjer:

Object = new Example() {
   public void display() {
      System.out.println("Anonimna klasa poništava metodu display().");
   }
};

Ovdje se objekt anonimne klase stvara dinamički kada moramo nadjačati metodu display(). Anonimna klasa nam također pomažu da naš kod bude sažet.