繁体   English   中英

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

[英]How to access protected field of a super class in java from subclasses?

我想从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 ?

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

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

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

public int getField() {
    return field;
}

然后,您可以执行以下操作:

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

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

参见此处6.6.2访问受保护的成员

对象的受保护成员或构造函数只能从负责该对象实现的代码在其中声明该对象的包外部访问。

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

protected修饰符允许子类直接访问超类成员。

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

例:

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一起)访问,并且只能由其在另一个程序包中的类的子类访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM