在Java中,无法从子类访问超类的受保护成员

sbo*_*ose 0 java inheritance

class Super {
   protected int a;
   protected Super(int a) { this.a = a; }
}

class Sub extends Super {
    public Sub(int a) { super(a); }
    public Sub() { this.a = 5; }
}




  public Sub() { this.a = 5; }  
Run Code Online (Sandbox Code Playgroud)

this.a = 5不起作用.为什么会这样?受保护的和公共成员应该被继承.

Luc*_*ore 9

问题不在于您访问变量,而是您没有调用基础构造函数:

class Super {
   protected int a;
   protected Super(int a) { this.a = a; }
}

class Sub extends Super {
    public Sub(int a) { super(a); }
    public Sub() { 
       super(0);  // <-- call base constructor
       this.a = 5; 
    }
}
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为您没有为其定义默认构造函数Super,因此如果您没有指定构造函数,派生类就不知道要调用哪个构造函数.