我有以下场景 - 一个包含内部抽象类的类:
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
的覆盖范围内使用Amethod
和doSomething
。为什么会这样?匿名实例应该仍然在内部属于instanceOfA
,因此应该能够访问它的内部。
答案 0 :(得分:3)
私人字段/方法只能在声明的类中进行访问(子类化不足以访问private
)。
答案 1 :(得分:1)
如果你定义
public void Bmethod(final A instanceOfA)
你可以打电话
@Override
protected void doSomething()
{
instanceOfA.Amethod();
}
但您无法访问Afield
,因为它是私有的