Автор оригинала: Pankaj Kumar.
Анонимный класс Java подобен локальному классу или внутреннему классу без имени. Мы можем использовать анонимный класс java для одновременного объявления и создания экземпляра класса.
Анонимный класс Java
Анонимный класс Java – это вложенный или локальный класс. Вы должны использовать их только в том случае, если хотите использовать локальный класс только один раз. Давайте рассмотрим пример анонимного класса в программе java.
package com.journaldev.java.examples; public interface Hello { public void sayHello(); }
Пример анонимного класса Java
Hello
– это интерфейс, давайте посмотрим, как мы можем создать анонимную реализацию класса интерфейса Hello.
package com.journaldev.java.examples; public class AnonymousExample { //nested anonymous class public static Hello hello = new Hello() { @Override public void sayHello() { System.out.println("Hello nested anonymous class"); } }; public static void main(String[] args) { //anonymous class inside method Hello h = new Hello() { @Override public void sayHello() { System.out.println("Hello anonymous class"); } }; h.sayHello(); AnonymousExample.hello.sayHello(); } }
Над классом Hello также может быть абстрактный класс, как показано ниже.
package com.journaldev.java.examples; public abstract class Hello { abstract void sayHello(); }
Мало того, Hello также может быть обычным классом высшего уровня, как показано ниже.
package com.journaldev.java.examples; public class Hello { public void sayHello(){}; }
Обратите внимание, что анонимные классы являются выражениями и заканчиваются точкой с запятой.
Анонимный класс определяется путем вызова конструктора класса, за которым следует код определения класса в фигурных скобках.
Поскольку у анонимного класса нет имени, мы не можем определить конструктор внутри тела кода класса.
Пример анонимного класса Java с аргументом конструктора
Что делать, если в нашем классе Hello нет конструктора без аргументов? Можем ли мы получить доступ к переменным класса в анонимном классе? Нужно ли нам переопределять все методы класса в анонимном классе?
Давайте ответим на вышеприведенные вопросы простым примером кода.
package com.journaldev.java.examples; public class Hello { protected String s; public Hello(String str){ this.s = str; } public void sayHello(){ System.out.println(s); }; void foo(){}; }
package com.journaldev.java.examples; public class AnonymousExample { public static void main(String[] args) { //anonymous class inside method Hello h = new Hello("abc") { @Override public void sayHello() { System.out.println("Hello anonymous class "+s); } }; h.sayHello(); } }
Важные моменты анонимного класса Java
- Мы можем использовать любой конструктор при создании анонимного класса. Обратите внимание, что аргумент конструктора используется для.
- Анонимный класс расширяет класс верхнего уровня и реализует абстрактный класс или интерфейс. Таким образом, правила модификатора доступа применяются как обычно. Мы можем получить доступ к защищенной переменной, если мы изменим ее на закрытую, то мы не сможем получить к ней доступ.
- Поскольку мы расширяем класс
Hello
выше, нам не требуется переопределять все методы. Однако, если бы это был интерфейс или абстрактный класс, мы должны были бы обеспечить реализацию всех нереализованных методов. - Вы не можете объявлять статические инициализаторы или интерфейсы-члены в анонимном классе.
- Анонимный класс может иметь статические члены при условии, что они являются постоянными переменными.
Это все для анонимного класса на java.