使用相同的变量名访问不同类型的超级成员

时间:2012-10-16 12:34:10

标签: java subclass

考虑以下超类和子类对,如何访问超类成员?

class Super { 
    Number aNumber; 
} 

class Subbie extends Super { 
    Float aNumber; 
}

3 个答案:

答案 0 :(得分:0)

您可以super.aNumber访问超级会员,前提是它是子类的实例。

答案 1 :(得分:0)

假设该属性没有visiblity修饰符,则假定它是包私有的。 Subbie只有Super的{​​{1}}才能访问aNumber

如果是,您可以像这样访问它:super.aNumber。注意super这里是一个隐式引用超类的关键字,与名为Super的超类没有任何关系。

class Super { 
    Number aNumber; 
} 

class Subbie extends Super { 
    Float aNumber; 
    public Number getNumberFromSuper() { 
        return super.aNumber;
    }
}

我建议在线阅读优秀的Java教程,例如:

答案 2 :(得分:0)

您可以使用称为访问修饰符的不同关键字定义字段(请查看最后的链接以获取有关此主题的详细说明),每个关键字定义访问/使用范围。我会把这个解释集中在字段上。

公开:每个人都可以访问。此访问修饰符通常与方法一起使用,而不是与字段一起使用。在Java中,鼓励使用getset方法来访问字段的值并分别更改它。您可以通过以下方式访问字段:

AClass c = new AClass();
c.publicField = 3; //Setting a value in a field, int in this case
int sum = c.publicField + 4; //Obtaining the value of publicField to use it 

私有:将字段定义为私有使其仅对类本身可见,这意味着类的边界之外的任何人都无法看到该字段。 Java中的公共类通常具有私有字段和访问器(get& set方法。)

public class AClass {

    public int publicField;
    private String privateField = "Can't see me!";

    public String getPrivateField() {
        return privateField;
    }

    public void setPrivateField(String newValue) {
        privateField = newVaule;
    }

}

Getters和Setter允许您控制对私有字段的访问,允许您在更新该字段的值之前执行所需的任何逻辑,或者在特定字段中准备字段,然后在需要时返回其值。

受保护:只有同一个包中的类和类的子类才能访问使用此关键字定义的字段。在您的情况下,Subbie可以访问protected的{​​{1}}字段,并且与Super在同一个包中的任何其他类也可以访问这些字段。

无访问修饰符:这是您当前的案例,您的问题的答案很大程度上依赖于您的类的结构。如果它们位于同一个包中,则您可以从Super访问Super的字段。否则,如果Subbie在另一个包中,您将无法访问该字段。此字段引用为 Package-Private

您可能想要查看的一些相关文章:

  1. Inheritance in Java
  2. Controlling the Access to Members of a Class