我在包relation中有一个抽象类database.relation,在包Join中有一个子类database.operationsrelation具有名为mStructure的受保护成员。

Join中:

public Join(final Relation relLeft, final Relation relRight) {
        super();
        mRelLeft = relLeft;
        mRelRight = relRight;
        mStructure = new LinkedList<Header>();
        this.copyStructure(mRelLeft.mStructure);

        for (final Header header :mRelRight.mStructure) {
        if (!mStructure.contains(header)) {
            mStructure.add(header);
        }
    }
}


上线

this.copyStructure(mRelLeft.mStructure);




for (final Header header : mRelRight.mStructure) {


我收到以下错误:


字段Relation.mStructure不可见


如果我将两个类放在同一个包中,则效果很好。谁能解释这个问题?

最佳答案

它有效,但是只有您自己的孩子会尝试访问它自己的变量,而不是其他实例的变量(即使它属于同一继承树)。

请参阅以下示例代码以更好地理解它:

//in Parent.java
package parentpackage;
public class Parent {
    protected String parentVariable = "whatever";// define protected variable
}

// in Children.java
package childenpackage;
import parentpackage.Parent;

class Children extends Parent {
    Children(Parent withParent ){
        System.out.println( this.parentVariable );// works well.
        //System.out.print(withParent.parentVariable);// doesn't work
    }
}


如果尝试使用withParent.parentVariable进行编译,则会得到:

Children.java:8: parentVariable has protected access in parentpackage.Parent
    System.out.print(withParent.parentVariable);


它是可访问的,但只能访问其自己的变量。

10-08 09:07