【问题标题】:Java, anonymous inner class definitionJava,匿名内部类定义
【发布时间】:2012-01-18 16:11:10
【问题描述】:

我在 Java 中看到过几个与此类似的示例,希望有人能解释发生了什么。似乎可以内联定义一个新类,这对我来说真的很奇怪。

第一行是预期的,因为它只是 toString。然而,第二个似乎可以内联覆盖该函数。

这有什么技术术语吗?
或者任何更深入的文档?

如果我有以下代码:

public class Apple {
    public String toString() {
        return "original apple";
    }
}

public class Driver {
    public static void main(String[] args) {
        System.out.println("first: " + new Apple());
        System.out.println("second: " + 
            new Apple() {
                public String toString() {
                    return "modified apple";
                }
            }
        );
    }
}

代码输出:

first: original apple
second: modified apple

【问题讨论】:

    标签: java inheritance overriding anonymous-class


    【解决方案1】:

    它是一个匿名内部类。您可以在Inner Classes 的 Java 文档链接中找到有关它的更多信息。 编辑我正在添加一个 better link 描述匿名内部类,因为 Java 文档还有一些不足之处。 /编辑

    大多数人会使用匿名内部类来动态定义侦听器。考虑这种情况:

    我有一个Button,当我单击它时,我希望它在控制台上显示一些内容。但是我不想在不同的文件中创建一个新类,也不想在这个文件的后面定义一个内部类,我希望逻辑在这里立即可用。

    class Example {
        Button button = new SomeButton();
    
        public void example() {
            button.setOnClickListener(new OnClickListener() {
                public void onClick(SomeClickEvent clickEvent) {
                    System.out.println("A click happened at " + clickEvent.getClickTime());
                }
            });
        }
    
        interface OnClickListener {
            void onClick(SomeClickEvent clickEvent);
        }
    
        interface Button {
            void setOnClickListener(OnClickListener ocl);
        }
    }
    

    这个例子有点做作,显然不完整,但我认为它传达了这个想法。

    【讨论】:

    • 我只是想补充一点,onClick方法中的'this'值是指Button实例,如果你想引用onClick方法中的Example实例,你可以使用'Example.this' .但是静态内部类没有这个引用。
    【解决方案2】:

    您的代码中发生的情况是,您正在使用匿名内部类隐式继承 Apple 并覆盖其 toString() 方法。

    【讨论】:

      【解决方案3】:

      它被称为匿名内部类,你可以阅读它herehere

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-05
        • 2014-03-06
        • 2012-09-14
        • 1970-01-01
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多