我有一个类CircularBuffer,它扩展了AbstractList。
我有第二个类ExponentialUnrolledLinkedList,它有一个扩展CircularBuffer的内部类Node。
我可以在ExponentialUnrolledLinkedList(在Node之外)访问Node实例的一些受保护成员,即使它们是在Node之外声明的(例如,在CircularBuffer中声明的受保护大小字段),但不是声明的受保护字段modCount AbstractList中。
我可以从内部类定义本身访问modCount,但不能从封闭类中访问。
例如
public class ExponentialUnrolledLinkedList<E> extends AbstractSequentialList<E> {
...
private Node last = new Node(1){
protected int firstIndex(){
return 0;
}
};
private class Node extends CircularBuffer<E> {
...
private void dirty(){
this.modCount++; // works
}
protected int firstIndex(){
return store.length;
}
}
public int size(){
return last.firstIndex() + last.size; // access to last.size works
}
public boolean add(E item){
...
last.modCount++; // can't access modCount, have to call last.dirty()
...
return true;
}
}
为什么我可以在内部类和outter类中访问大小,但我只能访问内部类中的modCount?我认为外部类可以访问其内部类可以访问的所有内容(显然是错误的)。显然,一些受保护的成员可以访问,但有些则不可访问。我通过在(私有)方法中包装modCount增量并调用该方法来解决这个问题,但这看起来很不优雅。
答案 0 :(得分:0)
CircularBuffer.size的可见性是什么? (它不是AbstractList或其超类的成员。)
您无法访问CircularBuffer.modCount,因为它的可见性在AbstractList类中是“受保护的”。这意味着只能在自己的包中以及在另一个包(例如CircularBuffer)中通过其类的子类访问该成员。