内部类示例,可替代接口

幼犬

有人告诉我,这引起了我对此话题的好奇:

Java gui类可以实现数百个侦听器和回调,并且许多书籍都教您在gui类中实现所有这些接口。另外,这些方面也可以在内部类中实现,因此,侦听器调用的方法不会混淆。

我想知道如何在ActionScript中做到这一点,ActionScript没有内部类,但是具有私有类。但是,我认为我还没有完全意识到内部类的含义,因此我只是想把我的头放在这种情况下,即我将使用它们来通过它们的用法来组织一个类的方法。

请显示一个示例,说明如何在ActionScript中(如果可能的话)在Java中的外观。

dhblah:

在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();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章