繁体   English   中英

Java,匿名内部类定义

[英]Java, anonymous inner class definition

我在 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 文档链接中找到有关它的更多信息。 编辑我正在添加一个 更好的链接来描述匿名内部类,因为 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);
    }
}

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

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

它被称为匿名内部类,您可以在此处此处阅读有关它的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM