创建扩展内部抽象类的匿名类

时间:2014-12-24 17:45:47

标签: java class inner-classes

我有以下场景 - 一个包含内部抽象类的类:

class A {

   private int Afield;
   public void Amethod() { ... }

   protected abstract class InnerOfA {
       ...
       protected abstract void doSomething();
   }
}

现在在另一个类的方法中我想创建一个扩展InnerOfA匿名类

class B {
   public void Bmethod(A instanceOfA)
   {
       A.InnerOfA instance = instanceOfA.new InnerOfA()
       {
           @Override
           protected void doSomething()
           {
                // Here I want to use the private fields and methods of A.
           }
       }
   }
}

但由于某些原因(我不明白),我无法在Afield的覆盖范围内使用AmethoddoSomething。为什么会这样?匿名实例应该仍然在内部属于instanceOfA,因此应该能够访问它的内部。

2 个答案:

答案 0 :(得分:3)

私人字段/方法只能在声明的类中进行访问(子类化不足以访问private)。

答案 1 :(得分:1)

如果你定义

public void Bmethod(final A instanceOfA)

你可以打电话

@Override
protected void doSomething()
{
    instanceOfA.Amethod();
}

但您无法访问Afield,因为它是私有的