新对象{}有什么作用?

时间:2011-10-12 05:39:51

标签: java constructor subclass

很难找到关于此的信息,因为我不知道它叫什么,所以这是我猜的第一个问题。

是否使用此表示法:

new Object() {//code here}

创建一个Object类型的新对象或创建一个新对象,该对象是对象的子类?如果它是一个子类,你可以把你可以用来声明一个类(成员变量,函数,内部类)的所有内容放在大括号内吗?你能为它写一个构造函数吗?

3 个答案:

答案 0 :(得分:6)

这称为anonymous class。基本上,您正在定义一个子类。

这个电话:

Object a = new Object() {
   // stuff
};

..定义了一个新的Object子类,其中包含//stuff(就像在普通A extends Object中声明一样。

维基百科也有a good article about them

它们主要用于闭包,这意味着匿名类中定义的函数可以访问封闭范围内的final变量。

实施例肥胖型:

interface Function {
    void run();
}

static void example(Function f) {
    f.run();
}

void runExample() {
    final int a = 10;
    example(new Function() {
        void run() {
            // Notice that "a" was defined in the outer scope
            System.out.println(a);
        }
    });
}

答案 1 :(得分:2)

new Object() {
    //code here
}

将创建一个扩展Object的新匿名内部类。这是一个完全有效的类,可能包含普通非匿名类包含的任何内容。虽然在匿名类中声明新方法是非常不切实际的,因为它们的范围非常小。

答案 2 :(得分:1)

new Object() {
    //code here
}

这是有效的。它将创建扩展Object的Anonymous内部类。但是你将无法保存它的参考。您可以使用的Reference只是Object类。

Object ob=new Object(){
    //code
}

通过使用此引用,您只能访问Object类的方法。在此匿名类中声明的任何新方法都不会被访问。可以使用绝对重写的方法。所以没有使用创建其他方法,因为你永远不能使用。同样在这个类中你不能创建一个构造函数,因为这是扩展Object的匿名类,构造函数只能用类名创建,而你不知道类名。