在java中访问继承的类变量

时间:2012-01-06 19:23:09

标签: java inheritance

如果从声明某些成员变量的活动继承,那么如何在执行继承的子类中访问这些成员变量?

4 个答案:

答案 0 :(得分:7)

可以通过public从任何构造函数或非protected方法或初始化程序访问

this.memberNamestatic个成员名称。

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,或者如果它们被声明为默认(包)访问且您的子类位于不同的类中,则无法访问变量。如果提供了访问者,您可以使用这些访问者。否则,他们无法访问。

如果成员被宣布为protectedpublic,那么您就像在自己的班级(this.var中宣布成员一样,或仅在var宣传成员歧义)。如果子类中的成员与超类具有相同的名称,则可以使用super.var来访问超类变量。

答案 3 :(得分:1)

如其他人所述,可以通过this.field从子类访问公共字段和受保护字段。也可以以相同的方式访问包私有字段,但前提是子类与父类在同一个包中。

无法以这种方式访问​​私有字段,但如果安全设置允许,则可以使用Java reflection访问它们。通常不推荐练习(私有成员通常因某种原因而私有),但在某些情况下它可能很有用,例如访问私有类成员以进行代码测试。有关如何以这种方式使用反射,请参阅the answers to this question