考虑以下超类和子类对,如何访问超类成员?访问具有相同变量名称的不同类型的Super成员
class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
}
考虑以下超类和子类对,如何访问超类成员?访问具有相同变量名称的不同类型的Super成员
class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
}
您可以访问超级会员super.aNumber
,只要它在子类的实例。
鉴于该属性没有可见性修饰符,它被假定为包私有。 Subbie
将只能访问Super
的aNumber
,如果它们在同一个包中。
如果是这样,您可以像这样访问它:super.aNumber
。注意super
这里是一个关键字,隐式指向超类,并且与名为Super
的超类没有任何关系。
class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
public Number getNumberFromSuper() {
return super.aNumber;
}
}
我建议采取对优秀的Java读取在线教程,例如:
您可以定义不同的关键字字段被称为访问修饰符(检查最后的链接以获得关于此主题的详细解释),每个e定义访问/使用的范围。我将专注于这个领域的解释。
Public:每个人都可以访问。此访问修饰符是定期与方法一起使用,而不是与字段一起使用。在Java中,鼓励使用get
和set
方法来访问字段的值并分别对其进行更改。您可以访问一个字段是这样的:
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
私人: Definining一个字段作为私人使其可见只类本身,这意味着一类的边界之外没有人能够看到这个领域。 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;
}
}
getter和setter让你控制访问您的私人领域,允许,如果你需要它,你要更新该字段的值或返回值之前,准备在一个特定的字段之前执行任何你想要的逻辑。
受保护:只有同一包中的类和类的子类才能访问使用此关键字定义的字段。在您的情况下,Subbie
可以访问Super
的protected
字段,并且与Super
相同的程序包中的任何其他类也可以访问这些字段。
禁止访问修饰符:这是您当前的情况,您的问题的答案强烈依赖于您的类的结构。如果他们在同一个包中,则可以从Subbie
访问Super
的字段。否则,如果Subbie
位于另一个包中,则将无法访问该字段。该字段被引用为Package-Private。
你可能要检查一些相关的文章:
我强烈建议你去通过Inheritance'的'基础。你可以从这个教程开始: - http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html –
来吧 - 问题不是那么糟糕......它是公平的,指向教程 - 但是-3? – dngfng
@dngfng:这显然是一个作业问题的直接帖子,没有OP的任何努力。 – geoffspear