В Java это выглядит так:
new JButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// code that will be performed on any action on this component
}
};
здесь ActionListener
- это интерфейс, и, вызывая new ActionListener() {/*interfaces method implementations goes here*/};
, вы создаете анонимный класс (анонимный, потому что у него нет имени) - реализацияэтого интерфейса.
Или вы можете создать внутренний класс следующим образом:
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// code that will be performed on any action on this component
}
};
, а затем использовать его следующим образом:
new JButton().addActionListener(new MyActionListener());
Более того, вы можете объявить своего слушателякак верхний уровень или статический внутренний класс.Но использование анонимного внутреннего класса иногда очень полезно, потому что оно позволяет вам реализовать ваш слушатель почти в том же месте, где объявлен компонент, действия которого слушатель слушает.Очевидно, что это не будет хорошей идеей, если код методов слушателей очень длинный.Тогда было бы лучше переместить его в неанонимный внутренний или статический вложенный класс или класс верхнего уровня.
В целом, внутренние классы - это нестатические классы, которые каким-то образом находятся внутри тела верхнего уровня.учебный класс.Здесь вы можете увидеть примеры из них на Java:
//File TopClass.java
class TopClass {
class InnerClass {
}
static class StaticNestedClass {
}
interface Fooable {
}
public void foo() {
new Fooable(){}; //anonymous class
class LocalClass {
}
}
public static void main(String... args) {
new TopClass();
}
}