我想从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 ?
答案 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一样),此外,还可以在另一个包中通过其类的子类访问。