如何访问从超类传递过来的子类属性?

时间:2018-09-21 15:11:43

标签: java inheritance

我有一个继承自其父类的子类,并且在理解如何访问子类的对象属性时遇到了麻烦。

在我的示例中,我将调用类Friend,该类继承自name的{​​{1}}和phone,但具有自己的变量Acquaintance和{{ 1}}。创建完成后,我要打印birthdate对象的内容,其中包括addressFriendnamephone

因为我希望所有变量都是私有的,所以我以为我会使用getter,但是我不确定在这种情况下如何调用父类。

birthdate

子类:

address

3 个答案:

答案 0 :(得分:1)

父类Acquaintance中的字母,例如getName是公开的,因此在这种情况下,它们对于子类Friend是可见的。因此,仅使用getName之类的吸气剂就可以从子类内部访问超类中定义的字段。

在您的情况下,只需删除getName修饰符,即可将static方法设为实例方法。然后像这样更改代码,

public void printContact() {
    /*
     * This is where I'm having trouble. I don't know how to access the name, and
     * phone which are contained in the superclass.
     */
    getName();
}

答案 1 :(得分:0)

  

基本上,我将把类称为Friend,它从熟人那里继承了namephone

由于namephone被声明为private,因此被继承。子类仅从其父类继承protectedpublic字段和方法。这意味着您必须调用getName()才能访问此字段。您可以不使用限定符来调用它,也可以使用this.getName()来调用它。在类getName()this.getName()中是同一件事。

答案 2 :(得分:0)

子类继承其父类的所有 public protected 成员。对于您的情况,由于getName()是公共的,因此通常可以在Acquaintance的子类中调用它,如下所示:

public void printContact() {
    System.out.println("Name: " + this.getName() + "Phone: " + this.getPhone() + "Birthdate: " + this.birthdate + "Address: " + this.address);
}

请注意,关键字this的使用是可选的。它只是“强调”正在调用该方法的是当前对象。

此外,当您希望超类的子类继承其成员(变量,方法等),同时又使它们对其他类不可见时,可以执行以下操作:

  • 为超类及其子代创建一个专属的 package
  • 如果您希望超类的成员只能由 package 中的子代访问,则声明它们时不要使用访问修饰符(例如: int phone );
  • 如果希望任何子级都可以访问超类的成员,请使用protected访问修饰符( eg: protected int phone)声明它们。 / li>