Почему класс Cat использует родителя Cat в качестве переменной экземпляра? - PullRequest
0 голосов
/ 19 ноября 2018

Я новичок в программировании на Java. Я не понимаю, что делает этот код. В классе cat я не понимаю переменную Cat parent. Какое значение это будет иметь?

public class Solution {

public static void main(String[] args) throws IOException {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    String motherName = reader.readLine();
    Cat catMother = new Cat(motherName);

    String daughterName = reader.readLine();
    Cat catDaughter = new Cat(daughterName, catMother);

    System.out.println(catMother);
    System.out.println(catDaughter);
}

public static class Cat {
    private String name;
    private Cat parent;

    Cat(String name) {
        this.name = name;
    }

    Cat(String name, Cat parent) {
        this.name = name;
        this.parent = parent;
    }

    @Override
    public String toString() {
        if (parent == null)
            return "The cat's name is " + name + ", no mother ";
        else
            return "The cat's name is " + name + ", " + parent.name + " is the mother";
    }
}

Это сбивает с толку, когда я вижу родителя Cat, объявленного как переменную в классе Cat!

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Взгляните на строки в вашем main методе ...

Эта строка создает новый Cat с именем (которое было определено с помощью ввода ранее):

Cat catMother = new Cat(motherName);

в то время как следующая строка также создает новый Cat, но использует другой конструктор (с двумя аргументами):

Cat catDaughter = new Cat(daughterName, catMother);

Если вы просто прочитаете имена аргументов, вы можете ясно увидеть взаимосвязь ... Использование этого конструктора дает новому Cat имя (дочь) и родственника (мать). Этот родственник хранится как атрибут в классе Cat. Таким образом, каждый экземпляр Cat имеет другого Cat в качестве родителя или null (последний может привести к различным проблемам).

Затем взгляните на атрибуты класса Cat, вот где значения (или нет):

private String name; // this is where the name of the cat object is stored
private Cat parent;  // this is where mother or father is stored (yes, only one possible at a time)

В Java довольно распространено иметь экземпляр некоторого класса, имеющий другой экземпляр того же класса в качестве атрибута, который ничем не отличается от объекта класса String, просто другого типа объекта.

0 голосов
/ 19 ноября 2018

Родитель Cat - это объект Cat, назначенный другому объекту Cat.

Здесь создается родительский элемент Cat:

String motherName = reader.readLine();
Cat catMother = new Cat(motherName);

И здесь он назначается другому объекту Cat "catDaughter"

String daughterName = reader.readLine();
Cat catDaughter = new Cat(daughterName, catMother);

Другими словами, с родительским полем вы можете создать связь между несколькими объектами Cat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...