在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);
}
}