为什么Cat类将Cat父级用作实例变量?

时间:2018-11-19 20:47:29

标签: java swing class

我是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 :(得分:1)

Cat父对象是分配给另一个Cat对象的Cat对象。

此处创建了Cat父级:

funcs1['0'](0)
Out[2]: True

funcs2['0'](0)
Out[3]: False

funcs3['0'](0)
Out[4]: False

在这里,它被分配给另一个Cat对象“ catDaughter”

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

换句话说,您可以在父字段中创建一些Cat对象之间的关系。

答案 1 :(得分:1)

看看您的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的对象(只是另一种对象)没有什么不同。 / p>