java复制构造函数和继承
作者:互联网
经过一番搜索,我没有找到有关复制构造函数和继承的任何好答案.
我有两个班:用户和学员.受训者从User继承,并且两个String参数被添加到受训者.
现在,我设法制作了User的副本构造函数,但对Trainee的副本构造函数不满意.
用户复制构造函数的代码如下:
public User (User clone) {
this(clone.getId(),
clone.getCivilite(),
clone.getNom(),
clone.getPrenom(),
clone.getEmail(),
clone.getLogin(),
clone.getTel(),
clone.getPortable(),
clone.getInscription(),
clone.getPw()
);
}
我尝试在我的Trainee复制构造函数中使用super:
public Trainee (Trainee clone) {
super (clone);
this (clone.getOsia(), clone.getDateNaiss());
}
但这没有用,我被迫编写完整版本的复制构造函数的代码:
public Trainee (Trainee clone) {
this(clone.getId(),
clone.getCivilite(),
clone.getNom(),
clone.getPrenom(),
clone.getEmail(),
clone.getLogin(),
clone.getTel(),
clone.getPortable(),
clone.getInscription(),
clone.getPw(),
clone.getOsia(),
clone.getDateNaiss()
);
}
由于主体结构的原因,我必须像这样强制转换新实例:
User train = new Trainee();
User train2 = new Trainee((Trainee) train);
所以我的问题是:是否有更清洁的方法来做到这一点?我不能使用超级吗?
预先感谢您的答复和协助.
解决方法:
最好让Trainee的“完整”副本构造函数也使用一个User:
public Trainee(Trainee clone)
{
this(clone, clone.getOsai(), clone.getDateNaiss());
}
public Trainee(User clone, String osai, String dateNaiss)
{
super(clone);
this.osai = osai;
this.dateNaiss;
}
尽可能保持在每个类中都有一个“主”构造函数的模式是值得的,所有其他构造函数都直接或间接链接到该模式.
现在,不清楚在不指定现有用户信息的情况下创建受训者是否有意义……或者可能以其他方式指定它.可能是在这种情况下,您确实确实确实需要两组独立的构造函数-一组用于复制构造函数,而另一组用于“只给我所有值”.这实际上取决于您的上下文-我们不能仅凭此判断.
在这种情况下,您可能会稍微违反“一个主构造函数”规则,但是您可以想到存在两个主构造函数,每个构造函数分别用于不同目的.从根本上讲,您遇到了“继承变得混乱”的情况-这太常见了:(
标签:java,inheritance,copy-constructor 来源: https://codeday.me/bug/20191010/1888275.html