小编典典

Java,匿名内部类定义

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

阅读 223

收藏
2020-11-01

共1个答案

小编典典

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

这个例子有些人为的,显然是不完整的,但我认为它使想法得以实现。

2020-11-01