Java 嵌套类匿名类

Java 嵌套类匿名类,java,oop,nested-class,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()

有人能帮我理解这行代码吗

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();
}

我不明白他是否定义了一个匿名类??以及如何在匿名中引用A.h()?

这一行创建了一个未命名的类,该类重写父类的
g()
方法,这样它就做了一件新事情:调用
h()
。但是,它会立即对这个未命名的类调用
g()
方法。

您引用的行定义了一个新的匿名类,该类扩展了一个
,并
覆盖
g()
,然后调用它


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

他创建了一个匿名类,还覆盖了
g()
。这与使用
Runnable
override
run时相同

new A(2) { public void g() {h();} }).g();
意味着

所以A(2)这里不是新类的名称,它是非名称类的父类,而不是重写A?请更正meA(2)意味着这个新的匿名类立即用构造函数参数2实例化。
(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();