Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,类能否访问其超类的超类中的受保护属性?_Java_Class_Inheritance_Protected - Fatal编程技术网

在Java中,类能否访问其超类的超类中的受保护属性?

在Java中,类能否访问其超类的超类中的受保护属性?,java,class,inheritance,protected,Java,Class,Inheritance,Protected,比如说, public class Question { protected String question, correctAnswer, type; .... } public class MultipleChoice extends Question{{ ... } public class TrueFalse extends MultipleChoice{ public TrueFalse(){ this.type = "TrueFalse"; this.que

比如说,

public class Question {
protected String question, correctAnswer, type;
....

}

public class MultipleChoice extends Question{{
  ...
}

public class TrueFalse extends MultipleChoice{
public TrueFalse(){
    this.type = "TrueFalse";
    this.question = "Question is not assinged!";
    this.correctAnswer = "Correct Answer is not assinged!";
}
....
}
显然,
class multipleechoice
可以访问
类问题
中的
问题、类型和正确答案
。但是当我试图通过
this.a
类TrueFalse
中访问它们时。我犯了个错误。
无法解析或不是字段


因此,类中的受保护属性是否只能在其子类中访问,而不能在子类中访问?三个文件在同一个包中,但属于不同的类文件。

好吧,我将您的代码复制/粘贴到一个在线编译器中并进行了尝试。它成功了,你可以找到它。看起来是的

我的意思是,如果这些是私有字段,这是有意义的,但对于其他字段,应该不会有问题(除非它只是包访问)

您是否在同一个文件中声明这些类?如果其中一个是嵌套类,则这可能是原因

对旧版本的答复 超级现场访问,嗯?嗯

这个怎么样?如果现场得到保护,这可能会起作用

注意:如果它仍然不适合您,请尝试在C中的非静态方法中使用它


是的,它可以。这是您无法访问的私有方法。

请澄清,因为它在这里工作正常(如上所述)。请提交一份完整的请柬。仅供记录:您确定多项选择不会重新声明这些字段吗?@GhostCat我实际上在MultipleEchoice的构造函数中使用了它们。这基本上是受保护的定义,可以访问受保护属性的类的任何子类本身都可以访问该属性。@AllenYang您究竟在哪里编写代码来访问字段
a
?@AllenYang我只是复制/粘贴到通用联机编译器中,并在没有警告的情况下运行它。它是有线的。实际上,我还在MultipleChoice的构造函数中使用了受保护的数据。这是一个原因吗?在创建普通的java pc应用程序而不是androidYou时,您可以使用层次结构n层的变量。是的,我在每个层声明新的x。这不是重点。默认情况下,受保护的字段在子类中可见。您的示例是通过创建另一个同名字段来隐藏固有的受保护字段!
public class MultilevelVar {
public static void main(String[] args) {
new C().fun();
}
}

class A {
protected int x = 10;
}

class B extends A {
int x = 20;
}

class C extends B {
int x = 30;
void fun() {
System.out.println(((A) this).x);
System.out.println(((B) this).x);
System.out.println(((C) this).x);
}
}