Java奇怪的语法 - (匿名子类)

5
我遇到了下面这个奇怪的语法,我从未见过这样的片段,虽然不是必须的,但很想理解它。
new Object() {
    void hi(String in) {
        System.out.println(in);
    }
}.hi("strange");

上面的代码输出结果为“奇怪”。谢谢。
3个回答

9

您创建了一个Object匿名子类,引入了一个名为hi的方法,并使用参数"strange"调用此方法。

假设您有以下内容:

class NamedClass extends Object {
    void hi(String in) { System.out.println(in); }
}

NamedClass instance = new NamedClass();
instance.hi("strange");

如果这个类只在一个地方需要,那么没有必要给它命名等 - 通过将其变成匿名类,您可以摆脱其名称,该类在单个表达式中被定义、实例化并立即调用hi方法。

0
这是完全正常的,被称为匿名类,它非常经常用于当您想将对象引用传递给函数时,您会使用匿名类或用于回调的使用。现在,.hi 在末尾是有效的,因为您刚刚使用 new 操作符实例化了类型为 Object 的对象,并且您有一个对它的引用,因此它起作用。

0
你创建了一个Object的匿名子类,然后调用了该方法。 存在四种类型的匿名内部类:-
1)Inner class,
2)Static nested classes
3)Method local inner classes
4)Anonymous inner classes

在匿名内部类中,您可以定义、实例化并立即使用该内部对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接