我有一个抽象类,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);
它是可访问的,但只能访问其自己的变量。
问题内容: 这是相同问题的详细阐述版本。 我们无法访问子类(位于不同包中)的子类中的(超类的)受保护变量。我们只能访问supeclass的继承变量。但是,如果将修饰符更改为“ protected static”,那么我们也可以访问超类的变量。为什么会这样呢? 这是我试图解释的相同代码段。 以上行为是预期的。但是我的问题是,如果我们将超类实例变量“ a”的访问修饰符更改为“保护静态”,那么我们也可以
下面是对同一问题稍加阐述的版本。 我们不能访问子类中的受保护变量(超类的),因为子类在不同的包中。我们只能访问supeclass的继承变量。但是如果我们将修饰符更改为“受保护的静态”,那么我们也可以访问超类的变量。为什么会这样? 下面是我试图解释的相同代码片段。 上述行为在意料之中。但我的问题是,如果我们将超类实例变量“a”的访问修饰符更改为“protected static”,那么我们也可以访问
我正在阅读这本Java SCJP的书,我偶然发现了以下内容: 但是我得到了这个错误: 那么,出什么问题了?
我有两个不同包的亲子班。我正在重写受保护类型的方法。我想访问子类中的超类保护方法。 考虑以下代码: 认为我是Java新手,并在main方法中提供替代comment的答案。
因此,从句子AA我得出结论,只有public和protected超类的方法可以被重写 ,sentenceBB也是如此 所以我搞混了两个句子之间的区别是什么?
问题内容: 我想对此进行一些讨论,但无法推断出我的情况的答案。仍然需要帮助。 这是我的代码: 在上面的示例中,下面的一些定义似乎令人困惑: 问题: 为什么我不能从子类实例(对象)访问受保护的成员()? 问题答案: 作为声明类的子类的其他包中的类只能访问其自己的继承成员。 …但不是其他对象的继承成员。