Sek*_*iki 29 java methods anonymous-inner-class object anonymous-class
为什么第一种方式是正确的,但第二种方式不是?
第一种方式:
new Object() {
public void a() {
/*code*/
}
}.a();
Run Code Online (Sandbox Code Playgroud)
第二种方式:
Object object = new Object() {
public void a() {
/*code*/
}
};
object.a();
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到更多相关信息?
And*_*lko 43
java.lang.Object
没有a
声明方法(2),而类实例创建表达式 返回的匿名类new Object() { public void a() {} }
做(1).
使用Java 10的局部变量类型推断(var
)使第二个选项与第一个选项一样有效.
var object = new Object() {
public void a() {}
};
object.a();
Run Code Online (Sandbox Code Playgroud)
Iva*_*van 20
在第二个选项中,将新对象分配给类型的引用Object
.因此,只能java.lang.Object
在该引用上调用定义的方法.
在第一个选项中,您基本上创建了扩展的匿名类的新对象java.lang.Object
.那个匿名类有额外的方法a()
,这就是你可以调用它的原因.