gpt4 book ai didi

Java,匿名内部类定义

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:51:40 25 4
gpt4 key购买 nike

我在 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

最佳答案

它是一个匿名内部类。您可以在 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);
}
}

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

关于Java,匿名内部类定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com