【问题标题】:java, anonymous Inner class issuejava,匿名内部类问题
【发布时间】:2014-03-06 01:17:01
【问题描述】:

假设我需要一个特定的应用程序范围的 actionListener。例如:

public class TestAnonymousInnerClass {
    private ActionListener closeAction = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    }
    ...
}

这段代码编译得很好,但是我可以说我使用了一个匿名内部类来实例化这个closeAction字段吗?

更新: 我正在阅读 SG Ganesh, Tushar Sharma - Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 和 1Z0-805(Java 专家之声)- 2013 年 这本书令人困惑:@ 987654321@ 如下所示,不可能有匿名和“非本地”类。 但是我的课程似乎属于那种,因为它不在方法的上下文中并且仍然是匿名的。

【问题讨论】:

  • 我不太明白,你说的我可以说是什么意思?在这种情况下,closeAction 是由抽象内部类实例化的,是的。
  • @Merguez:匿名,不抽象。创建的类是具体的。
  • 哎呀,对不起,措辞错误。
  • 作者必须定义“本地”/“非本地”的含义。如果在本地他只表示“在方法内部定义”,那么他就错了。
  • 您的示例实际上是“本地的”,因为在编译类时,字段初始值设定项表达式成为构造函数的一部分。您可以说本地/非本地区别在于在执行的代码中定义的类和直接定义为另一个类的成员的类(在您的情况下是匿名类的 instance是容器的成员,但类本身不是)。

标签: java inner-classes anonymous-class


【解决方案1】:

是的,您已经创建了ActionListener 接口的匿名内部实现类。并将其实例化并赋值给closeAction变量

简而言之,我们可以说匿名类是一个根本没有名字的内部类。并且在其创建时正在创建其实例。详情请查看here

【讨论】:

  • 或者更确切地说,一个实现 ActionListener 接口的匿名类。
  • Mb 我有点不清楚。我读过inner classes 不能匿名。它是一个内部类吗?
  • 实际上只有内部类可以是匿名的。
  • 更新问题。请检查一下好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多