例如,
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 MultipleChoice
可以访问question, type, and correctAnswer
中的class Question
。但是当我尝试通过class TrueFalse
在this.a
中访问它们时。我收到了一个错误。
cannot be resolved or is not a field
。
因此,类中的protected属性是否只能在其子类中访问,而不能在子类中访问?三个文件在同一个包中,但是不同的类文件。
答案 0 :(得分:1)
是的,它可以。这是您无法访问的私密方法。
答案 1 :(得分:0)
好吧,我将你的代码复制/粘贴到在线编译器中并试用了。它奏效了,您可以找到它here。这看起来像是。
我的意思是,如果那些是私有字段就有意义了,但其余部分应该没有问题(除非它只是包访问)。
您是否在同一个文件中声明了这些类?如果其中一个是嵌套类,那可能就是原因。
超级超级现场接入,呃?嗯...
((A)this).a
怎么样?如果该字段受到保护,也许这可行。注意:如果它仍然不适合您,请尝试在C内部的非静态方法中使用它。
答案 2 :(得分:0)
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);
}
}