Анонимният вътрешен клас на Java е вътрешен клас без име и за който се създава само един обект. Анонимен вътрешен клас може да бъде полезен, когато се прави екземпляр на обект с определени „екстри“, като например претоварване на методи на клас или интерфейс, без да се налага действително да се прави подклас на клас.
С прости думи, клас, който няма име, е известен като анонимен вътрешен клас в Java. Трябва да се използва, ако трябва да замените метод на клас или интерфейс. Java Anonymous вътрешният клас може да бъде създаден по два начина:
- Клас (може да е абстрактен или конкретен).
- Интерфейс
Пример за анонимен вътрешен клас на Java с използване на клас
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(); } }Тествайте сега
Изход:
nice fruits
Вътрешна работа на даден код
Person p=new Person(){ void eat(){System.out.println('nice fruits');} };
- Създава се клас, но името му се определя от компилатора, който разширява класа Person и осигурява имплементацията на метода eat().
- Създава се обект от класа Anonymous, който е посочен от 'p', референтна променлива от тип Person.
Вътрешен клас, генериран от компилатора
import java.io.PrintStream; static class TestAnonymousInner$1 extends Person { TestAnonymousInner$1(){} void eat() { System.out.println('nice fruits'); } }
Пример за анонимен вътрешен клас на Java, използващ интерфейс
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(); } }Тествайте сега
Изход:
nice fruits
Вътрешна работа на даден код
Той изпълнява две основни задачи зад този код:
Eatable p=new Eatable(){ void eat(){System.out.println('nice fruits');} };
- Създава се клас, но името му се определя от компилатора, който имплементира интерфейса Eatable и осигурява имплементацията на метода eat().
- Създава се обект от класа Anonymous, който е посочен от 'p', референтна променлива от типа Eatable.
Вътрешен клас, генериран от компилатора
import java.io.PrintStream; static class TestAnonymousInner1$1 implements Eatable { TestAnonymousInner1$1(){} void eat(){System.out.println('nice fruits');} }