很难找到关于此的信息,因为我不知道它叫什么,所以这是我猜的第一个问题。
是否使用此表示法:
new Object() {//code here}
创建一个Object类型的新对象或创建一个新对象,该对象是对象的子类?如果它是一个子类,你可以把你可以用来声明一个类(成员变量,函数,内部类)的所有内容放在大括号内吗?你能为它写一个构造函数吗?
答案 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的匿名类,构造函数只能用类名创建,而你不知道类名。