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

时间:2015-08-07 06:37:10

标签: java

我遇到了下面奇怪的语法,我从未见过这样的片段,它不是必需的,但很好理解它

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

以上代码将输出显示为strange

谢谢

3 个答案:

答案 0 :(得分:9)

您已创建了anonymous sub-class Object,其中引入了一个名为hi的方法,之后您可以使用参数"strange"调用此方法。

假设你有:

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

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

如果只在一个地方需要这个类,那么就没有真正的需要被命名等等 - 通过使它成为一个匿名类,你可以摆脱它的名字,类被定义和实例化,并且在单个表达式中立即调用hi方法。

答案 1 :(得分:0)

这是完全正常的,并且被称为匿名类,它经常被使用,如果你想将对象引用传递给函数,你将使用匿名类或者回调的使用,现在.hi结束了.hi是有效的,因为您只是使用new运算符来实例化Object类型的对象,并且您有一个对它的引用,这就是它的工作原理。

答案 2 :(得分:0)

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

Array
(
    [0] => Array
        (
            [id] => employee1
            [data] => Array
                (
                    [0] => Array
                        (
                            [salescount] => 4
                            [salesstat] => Sold
                        )

                )

        )

    [1] => Array
        (
            [id] => employee2
            [data] => Array
                (
                    [0] => Array
                        (
                            [salescount] => 2
                            [salesstat] => In Progress
                        )

                    [1] => Array
                        (
                            [salescount] => 5
                            [salesstat] => Sold
                        )

                )

        )

)

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