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.h()?
发布于 2012-03-30 19:01:23
他创建了一个匿名类并覆盖了g()。这和你使用Runnable和override run是一样的。
(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();发布于 2012-03-30 19:00:20
这一行创建了一个未命名的类,它覆盖了父类的g()方法,因此它做了一件新的事情:调用h()。但是,它会立即对这个未命名的类调用g()方法。
发布于 2012-03-30 19:00:55
您引用的这一行定义了一个新的匿名类,它extends A和Overrides g(),然后调用它。
由于匿名类扩展了A,因此它包含了h()的定义,因此可以调用它
https://stackoverflow.com/questions/9941604
复制相似问题