在java中访问继承的类变量

在java中访问继承的类变量,java,inheritance,Java,Inheritance,如果从声明了某些成员变量的活动继承,那么如何在执行继承的子类中访问这些成员变量 public或protected成员名称可以通过this.memberName从任何构造函数或非静态方法或初始值设定项访问 private或包级别的成员(从不同包中的子类访问)不能直接访问,需要通过非特权接口(如publicgetter)访问。如果成员声明为private,或者声明为默认值(包)如果您的子类位于不同的类中,则无法访问变量。如果提供了访问器,则可以使用这些访问器。否则,它们将无法访问 如果成员被声明为p

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

public
protected
成员名称可以通过
this.memberName
从任何构造函数或非
静态方法或初始值设定项访问


private
或包级别的成员(从不同包中的子类访问)不能直接访问,需要通过非特权接口(如
public
getter)访问。

如果成员声明为
private
,或者声明为默认值(包)如果您的子类位于不同的类中,则无法访问变量。如果提供了访问器,则可以使用这些访问器。否则,它们将无法访问


如果成员被声明为
protected
public
,那么您可以像在您自己的类中声明一样访问它们(
this.var
,或者如果没有歧义,就只声明
var
)。如果子类中的成员与超类同名,则可以使用
super.var
访问超类变量。

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

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);
    }
}

私有字段不能以这种方式访问,但如果安全设置允许,可以使用Java访问它们。这通常不是推荐的做法(私有成员通常是私有的,这是有原因的),但在某些情况下,例如出于代码测试目的访问私有类成员时,它可能很有用。请参阅以了解如何以这种方式使用反射。

还要检查是否存在命名冲突:如果遇到意外行为,则不需要使用
super
关键字。没错。但这是一个初学者的问题。所以,我想说得非常清楚。如果字段被子类中的字段隐藏,则只需要
super
关键字。同样正确:)。但我不想解释缩写。如果user1058210这样做,一切都会好起来。。。总有一天他会找到更短的解决方案。