Java,匿名内部类定义
我在Java中看到了几个类似的例子,希望有人能解释发生了什么。似乎一个新类可以内联定义,这对我来说真的很奇怪 第一个打印输出行是预期的,因为它只是toString。然而,第二个函数似乎可以内联重写 有专门的术语吗?Java,匿名内部类定义,java,inheritance,overriding,anonymous-class,Java,Inheritance,Overriding,Anonymous Class,我在Java中看到了几个类似的例子,希望有人能解释发生了什么。似乎一个新类可以内联定义,这对我来说真的很奇怪 第一个打印输出行是预期的,因为它只是toString。然而,第二个函数似乎可以内联重写 有专门的术语吗? 或者任何更深入的文档 如果我有以下代码: public class Apple { public String toString() { return "original apple"; } } public class Driver { p
或者任何更深入的文档 如果我有以下代码:
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文档链接中找到关于它的更多信息EDIT我添加了一个描述匿名内部类的函数,因为Java文档还有一些地方需要改进/EDIT 大多数人会使用匿名内部类来动态定义侦听器。考虑这种情况: 我有一个
按钮
,当我点击它时,我想让它在控制台上显示一些东西。但是我不想在另一个文件中创建一个新类,也不想在这个文件的后面定义一个内部类,我希望逻辑在这里立即可用
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()
方法。它被称为一个匿名的内部类,你可以读到关于它的信息,然后 我只想补充一点,onClick方法中的'this'值指的是Button实例,如果要指的是onClick方法中的示例实例,可以使用'Example.this'。但是静态内部类没有此引用。