Java anonimna unutarnja klasa je unutarnja klasa bez imena i za koju se kreira samo jedan objekt. Anonimna unutarnja klasa može biti korisna kada se radi instanca objekta s određenim 'dodacima' kao što su metode preopterećenja klase ili sučelja, bez potrebe za stvarnom potklasom klase.
Jednostavnim riječima, klasa koja nema ime poznata je kao anonimna unutarnja klasa u Javi. Trebalo bi se koristiti ako morate nadjačati metodu klase ili sučelja. Java Anonymous unutarnja klasa može se stvoriti na dva načina:
- Klasa (može biti apstraktna ili konkretna).
- Sučelje
Java anonimni primjer unutarnje klase pomoću klase
TestAnonymousInner.java
abstract class Person{ abstract void eat(); } class TestAnonymousInner{ public static void main(String args[]){ Person p=new Person(){ void eat(){System.out.println('nice fruits');} }; p.eat(); } }Testirajte sada
Izlaz:
nice fruits
Interni rad zadanog koda
Person p=new Person(){ void eat(){System.out.println('nice fruits');} };
- Klasa je stvorena, ali o njenom imenu odlučuje kompilator, koji proširuje klasu Person i osigurava implementaciju metode eat().
- Stvara se objekt klase Anonymous na koji upućuje 'p', referentna varijabla tipa Person.
Interna klasa koju generira kompilator
import java.io.PrintStream; static class TestAnonymousInner$1 extends Person { TestAnonymousInner$1(){} void eat() { System.out.println('nice fruits'); } }
Java anonimni primjer unutarnje klase pomoću sučelja
interface Eatable{ void eat(); } class TestAnnonymousInner1{ public static void main(String args[]){ Eatable e=new Eatable(){ public void eat(){System.out.println('nice fruits');} }; e.eat(); } }Testirajte sada
Izlaz:
nice fruits
Interni rad zadanog koda
Iza ovog koda obavlja dva glavna zadatka:
Eatable p=new Eatable(){ void eat(){System.out.println('nice fruits');} };
- Klasa je stvorena, ali o njenom imenu odlučuje prevodilac, koji implementira sučelje Eatable i osigurava implementaciju metode eat().
- Stvara se objekt klase Anonymous na koji upućuje 'p', referentna varijabla tipa Eatable.
Interna klasa koju generira kompilator
import java.io.PrintStream; static class TestAnonymousInner1$1 implements Eatable { TestAnonymousInner1$1(){} void eat(){System.out.println('nice fruits');} }