gpt4 book ai didi

java拷贝构造函数和继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:54 27 4
gpt4 key购买 nike

经过一番搜索后,我没有找到关于复制构造函数和继承的问题的任何好的答案。我有两个类(class):用户和实习生。 Trainee继承自User,Trainee增加两个String参数。现在我设法制作了 User 的复制构造函数,但我对 Trainee 的复制构造函数不满意。User拷贝构造函数的代码是这样的:

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()
);
}

因为我的 main 的构造,我必须像这样转换我的新实例:

  User train = new Trainee();
User train2 = new Trainee((Trainee) train);

所以我的问题是:有没有更简洁的方法来做到这一点?我不能使用 super 吗?

预先感谢您的回答和帮助。

最佳答案

最好让 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;
}

尽可能保持在每个类中有一个“主”构造函数的模式是值得的,所有其他构造函数都直接或间接地链接到它。

现在,尚不清楚创建 Trainee 而不指定现有用户信息...或可能以其他方式指定它是否有意义。 可能是在这种情况下你确实确实需要两组独立的构造函数——一组用于复制构造函数,另一组用于“只给我所有值”个别”的构造函数。这实际上取决于您的上下文 - 我们不能仅凭此判断。

在那种情况下,您会略微违反“一个主构造器”规则,但您可以认为有两个 个主构造器,每组构造器一个用于不同目的。从根本上说,你遇到了“继承变得困惑”——这太常见了:(

关于java拷贝构造函数和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13635078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com