当前位置: 代码迷 >> java >> Java奇怪的语法-(匿名子类)
  详细解决方案

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

热度:16   发布时间:2023-07-25 19:40:55.0

我遇到过以下奇怪的语法,我从未见过这样的代码片段,虽然不是必需的,但很好奇

new Object() {
    void hi(String in) {
        System.out.println(in);
    }
}.hi("strange");

上面的代码给出了strange输出

谢谢

您已经创建了Object的 ,该引入了一种名为hi的方法,此后您将使用参数"strange"调用此方法。

假设您有:

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

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

如果仅在一个地方需要此类,则无需真正命名,以此类推-通过将其设为匿名类,您可以摆脱它的名称,定义和实例化该类,并在单个内部立即调用hi方法。表达。

这是完全正常的,被称为匿名类,它经常使用,如果您想将对象引用传递给函数,则可以使用匿名类或使用回调来实现,现在.hi结尾是有效的,因为您只是使用new运算符实例化了Object类型的对象,并且对其具有引用,因此这才起作用。

您已经创建了Object的匿名子类,然后调用了该方法。 存在四种类型的匿名内部类:

1)Inner class,
2)Static nested classes
3)Method local inner classes
4)Anonymous inner classes

在匿名内部类中,您可以在那里定义,实例化和使用该内部对象