这是我的班级:
class Cat {
static int lives = 9;
private String name;
private int age;
public Cat(String s, int i) {
name = s;
age = i;
}
public Cat(Cat c) {
// Failed attempt to define Copy Constructor
return new Cat(c.name,c.age);
}
public String toString() {
return (name + ", " + age);
}
}
我想定义复制构造函数,以便我可以从现有的对象实例化Cat的新对象。像这样:
Cat Garfield = new Cat("Garfield",10);
Cat Tom = new Cat(Garfield);
当我试用它时,它给出了复制构造函数定义的编译错误。请帮我理解什么是错的。是的,构造函数不能有返回类型,但我们在这里返回对Cat的引用。
答案 0 :(得分:7)
不要做
return new Cat(c. ...
但
this(c.name, ...)
构造函数不会通过return返回对象!
答案 1 :(得分:3)
构造函数不返回任何内容。在构造函数中,您将获得"骨架"您的新对象(引用this
),并根据需要正确初始化。
所以第一步是使用该引用调用正确的构造函数,以初始化基本的东西:
this( c.name, c.age );
然后,由于这是一个复制构造函数,并且您希望获得原始Cat
的完整副本,因此如果您有任何字段,则应继续初始化其余字段。
例如,如果您的普通构造函数中的字段int remainingLives
已初始化为lives
,但另一个Cat
已经失去了三条生命,则您必须遵循通过
remainingLives = c.remainingLives;
否则它不是真正的副本。
答案 2 :(得分:1)
理想情况下,您的复制构造函数应该像
public Cat(Cat c) {
name = c.name;
age = c.age;
}
(假设您正在使用此构造函数创建类的对象' Cat'使用现有的对象' Cat')