嵌套类匿名类

时间:2012-03-30 10:55:36

标签: java oop nested-class

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()?

3 个答案:

答案 0 :(得分:4)

这一行创建了一个无命名的类,它覆盖了父类的g()方法,因此它做了一件新事:调用h()。但是,它会立即在这个没有命名的类上调用g()方法。

答案 1 :(得分:3)

他创建了一个匿名类,并且还覆盖了g()。它与使用Runnableoverride运行时相同。

(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 AOverrides g(),然后调用它。

由于匿名类扩展了A,它体现了h()的定义,因此可以调用它