用作接口替代的内部类的示例

Pup*_*Pup 8 java oop interface actionscript-3 inner-classes

我被告知,这引起了我对这个话题的好奇心:

Java gui类可以实现数百个Listener和Callbacks,许多书籍教你在gui类中实现所有这些接口.或者,这些方面可以在内部类中实现,因此该侦听器调用的方法不会混淆.

我想知道如何在ActionScript中执行此操作,ActionScript没有内部类,但具有私有类.但是,我不认为我完全意识到内在的课程是什么,所以我只是试图围绕我将使用它们按用法组织课程方法的情况.

如果可能的话,请展示ActionScript中的外观示例,否则为Java.

dhb*_*lah 5

在java中它看起来像这样:

  new JButton().addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
          // code that will be performed on any action on this component
      }
  };
Run Code Online (Sandbox Code Playgroud)

这里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
   }
 };
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

 new JButton().addActionListener(new MyActionListener());
Run Code Online (Sandbox Code Playgroud)

此外,您可以将侦听器声明为顶级或静态内部类.但是使用匿名内部类有时非常有用,因为它允许您几乎在声明侦听器所侦听的组件的同一位置实现侦听器.显然,如果监听器方法代码很长,那将不是一个好主意.然后将它移动到非匿名内部或静态嵌套或顶级类中会更好.

通常,内部类是非静态类,它们以某种方式驻留在顶级类的主体内.在这里,您可以在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();
    }
}
Run Code Online (Sandbox Code Playgroud)