Как получить доступ к атрибутам подкласса, переданным из суперкласса? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть подкласс, который расширяется от его родительского класса, и у меня возникают проблемы с пониманием того, как я получу доступ к атрибутам объекта из подкласса, которые были унаследованы от родительского класса.

В моем примере явызовите класс Friend, который наследует name и phone от Acquaintance, но имеет свои собственные переменные birthdate и address.После создания я хочу напечатать содержимое объекта Friend, который включает name, phone, birthdate, address.

Поскольку я хочу, чтобы все мои переменные были частными,Я подумал, что буду использовать геттеры, но я не уверен, как бы я назвал родительский класс в этом случае.

public class Acquaintance {

    private String name;
    private String phone;

    public Acquaintance(String name, String phone) {

        this.name = name;
        this.phone = phone;
    }

    public static String getName() {
        return this.name;
    }

    public String getPhone() {
        return this.phone;
    }

    public void printContact() {
        System.out.println("Name: " + this.name + ", Phone: " + this.phone);

    }

}

Подкласс:

public class Friend extends Acquaintance {

    private String address;
    private String birthdate;

    public Friend(String name, String phone, String birthdate, String address) {
        super(name, phone);
        this.address = address;
        this.birthdate = birthdate;
    }

    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.
        */


        System.out.println("Name: " + "Phone: " + "Birthdate: " + this.birthdate + "Address: " + this.address);
    }

}

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

В основном я назову класс Friend, который наследует name и phone от Знакомого

Поскольку name и phone объявлены private,они не унаследованы.Подкласс наследует только поля и методы protected и public от своего родительского класса.Это означает, что вы должны позвонить getName(), чтобы получить доступ к этому полю.Вы можете позвонить без квалификатора или позвонить по номеру this.getName().В классе getName() и this.getName() - это одно и то же.

0 голосов
/ 21 сентября 2018

Подкласс наследует всех открытых и защищенных членов своего суперкласса.В вашем случае, поскольку getName() является общедоступным, вы можете обычно вызывать его в подклассах Acquaintance, как показано ниже:

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

Обратите внимание, что использование ключевого слова this необязательно.Это просто «подчеркивает», что текущий объект вызывает метод.

Кроме того, если вы хотите, чтобы потомки суперкласса наследовали его члены (переменные, методы и т. Д.), При этом оставляя их невидимыми для других классов, вы можете сделать следующее:

  • Создайте эксклюзивный пакет для суперкласса и его дочерних элементов;
  • Если вы хотите, чтобы члены суперкласса были доступны только дочерним элементам внутри пакета , объявитеони без модификатора доступа ( например: int phone);
  • Если вы хотите, чтобы члены суперкласса были доступны любому из дочерних элементов, объявите их с доступом protectedмодификатор ( например: protected int phone);.
0 голосов
/ 21 сентября 2018

Методы получения в вашем родительском классе 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...