如何从子类访问java中超类的受保护字段?

时间:2017-03-13 09:44:13

标签: java inheritance

我想从Java中的子类访问超类的受保护字段:

Class Super {
 protected int field; // field set to a value when calling constructor
}
Class B extends Super { // field of super class is set to value when calling
                        // constructor

}

Class C extends Super { // same here

}
B b = new B();
C c = new C();
b.super.field ?

4 个答案:

答案 0 :(得分:3)

该类可以直接访问该字段,就好像它是自己的字段一样。问题是执行访问的代码必须在派生类本身的代码中,而不是在代码中使用派生类:

class B extends Super {
    ...
    int getSuperField() {
        return field;
    }
}

答案 1 :(得分:1)

在Super或B中,创建一个getter方法:

public int getField() {
    return field;
}

然后你可以这样做:

B b = new B();
int field = b.getField();

答案 2 :(得分:1)

不允许访问声明和扩展类体外的受保护字段。

请参阅此处6.6.2 Access to a protected Member

  

对象的受保护成员或构造函数可以从包外部访问,只能通过负责实现该对象的代码来声明它。

解决方案是使用setter/getter或将其公开的任何答案。

答案 3 :(得分:1)

protected modifier允许子类直接访问超类成员。

但访问应该在子类内部或从同一个包中进行。

示例:

package A; 

public class Superclass{ 
  protected String name; 
  protected int age;
} 

package B;  
import A.*;  

public class LowerClass extends SuperClass{  
  public static void main(String args[]){  
    LowerClass lc = new LowerClass();  
    System.out.println("Name is: " + lc.name); 
    System.out.println("Age is: " + lc.age);   
  }  
}

来自Javadoc:

protected修饰符指定只能在自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问。