Java – 内联类定义

我在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文档链接中找到有关它的更多信息。 编辑我正在添加一个描述匿名内部类的更好的链接 ,因为Java文档留下了一些需要的东西。 /编辑

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

我有一个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); } } 

这个例子有点做作,显然不完整,但我认为它可以解决这个问题。

您的代码中发生的事情是您隐式地使用匿名内部类inheritanceApple并重写其toString()方法。

它被称为一个匿名的内部类,你可以在这里和这里阅读它。