gpt4 book ai didi

java - 为什么我的子类不能访问其父类(super class)的 protected 变量,当它位于不同的包中时?

转载 作者:IT老高 更新时间:2023-10-28 21:06:15 25 4
gpt4 key购买 nike

我有一个抽象类 relation 在包 database.relation 和它的子类 Join 在包 database .操作relation 有一个名为 mStructure 的 protected 成员。

加入:

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) {

我收到以下错误:

The field Relation.mStructure is not visible

如果我将两个类放在同一个包中,这将完美运行。谁能解释一下这个问题?

最佳答案

它有效,但只有你的 child 试图访问它自己的变量,而不是其他实例的变量(即使它属于同一个继承树)。

查看此示例代码以更好地理解它:

//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);

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

关于java - 为什么我的子类不能访问其父类(super class)的 protected 变量,当它位于不同的包中时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com