我在包relation
中有一个抽象类database.relation
,在包Join
中有一个子类database.operations
。 relation
具有名为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);
它是可访问的,但只能访问其自己的变量。