我是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类中声明为变量时,这很令人困惑!
答案 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>