public class A {
protected int x;
public A(int x) { this.x = x; }
public void g() { System.out.println(x); }
public void h() { System.out.println(x + 10); }
}
public class B {
public void f() {
(new A(2) {
public void g() {
h();
}
}).g();
}
}
public static void main(String[] args) {
new B().f();
}
有些正文可以帮助我理解代码中的这一行:
new A(2) { public void g() {h();} }).g();
我不明白他是否用A定义了一个匿名类?以及如何在匿名中他可以引用A.h()?
答案 0 :(得分:4)
这一行创建了一个无命名的类,它覆盖了父类的g()
方法,因此它做了一件新事:调用h()
。但是,它会立即在这个没有命名的类上调用g()
方法。
答案 1 :(得分:3)
他创建了一个匿名类,并且还覆盖了g()
。它与使用Runnable
和override
运行时相同。
(new A(2) { public void g() {h();} }).g();
装置
class C extends A
{
public C()
{
super(2);
}
@Override
public void g()
{
this.h();
}
}
(new C()).g(); // or C c = new C(); c.g();
答案 2 :(得分:2)
您引用的行定义了一个新的匿名类extends A
和Overrides
g()
,然后调用它。
由于匿名类扩展了A,它体现了h()
的定义,因此可以调用它