在Java中,类可以访问其超类的超类中的受保护属性吗?

时间:2017-04-30 04:47:10

标签: 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.question = "Question is not assinged!";
    this.correctAnswer = "Correct Answer is not assinged!";
}
....
}

很明显,class MultipleChoice可以访问question, type, and correctAnswer中的class Question。但是当我尝试通过class TrueFalsethis.a中访问它们时。我收到了一个错误。 cannot be resolved or is not a field

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

3 个答案:

答案 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);
}
}