如果从声明某些成员变量的活动继承,那么如何在执行继承的子类中访问这些成员变量?
答案 0 :(得分:7)
public
从任何构造函数或非protected
方法或初始化程序访问 this.memberName
或static
个成员名称。
private
或包级别成员(从不同包中的子类访问)无法直接访问,需要通过非特权接口访问,例如public
getter。
答案 1 :(得分:5)
class A {
protected int a = 3;
}
class B extends A {
protected int b = 2;
void doIt() {
System.out.println("super.a:" + super.a);
System.out.println("this.b: " + this.b);
}
}
答案 2 :(得分:3)
如果成员被声明为private
,或者如果它们被声明为默认(包)访问且您的子类位于不同的类中,则无法访问变量。如果提供了访问者,您可以使用这些访问者。否则,他们无法访问。
如果成员被宣布为protected
或public
,那么您就像在自己的班级(this.var
中宣布成员一样,或仅在var
宣传成员歧义)。如果子类中的成员与超类具有相同的名称,则可以使用super.var
来访问超类变量。
答案 3 :(得分:1)
如其他人所述,可以通过this.field
从子类访问公共字段和受保护字段。也可以以相同的方式访问包私有字段,但前提是子类与父类在同一个包中。
无法以这种方式访问私有字段,但如果安全设置允许,则可以使用Java reflection访问它们。通常不推荐练习(私有成员通常因某种原因而私有),但在某些情况下它可能很有用,例如访问私有类成员以进行代码测试。有关如何以这种方式使用反射,请参阅the answers to this question。