如何调用多个嵌套内部类的父方法

时间:2014-12-25 13:06:05

标签: java inner-classes

我想从B.f()调用A.f(),但两者都是内部类,如果我用传统的方式编写,它就不会编译。 没有像代码中的A _this这样的临时变量的简单方法吗?

class MyClass {
  [...]
  class A {
    public void f(){System.out.println("A.f");};
    public void g(){System.out.println("A.g");};
  }
  class B {
    public void f(){System.out.println("B.f");};
  }

  public A a() {
    return new A() {
      public void g() {
        // I want to avoid this step
        final A _this = this;
        new B() {
          public void f() {
            System.out.println("foo");
            // this works
            _this.f();
            // but this does not compile
            A.this.f();
          }
        }.f();
      }
    };
  }
  [...]
}

1 个答案:

答案 0 :(得分:0)

您需要正确地将代码括在括号中,然后A.this.f()编译精确的等等。

class A {
    public void f() {
        System.out.println("A.f");
    }

    public void g() {
        System.out.println("A.g");
    }

    public A a() {
        return new A() {
            public void g() {
                =
                new B() {
                    public void f() {
                        System.out.println("foo");
                        A.this.f();
                    }
                }.f();
            }
        };
    }

    public static void main(String[] args) {
        new A().a().g();
    }
}

class B {
    public void f() {
        System.out.println("B.f");
    }

}

更新:您可以将_this.f();替换为new MyClass().new A().f();,但这会导致创建新的对象。