我看到了一个示例,它试图解释Java中的继承。Employee类是基类,它有三个实例变量和三个构造函数。具体如下:
public class Employee{
private String name;
private int id;
public Employee(){
name = " No Name!";
id = 00100;
}
public Employee(String n, int i){
name = n;
id = i;
}
public Employee (Employee originalObject){
name = originalObject.name;
id = originalObject.id;
}我的问题是:第三个构造函数的意义是什么?以及它如何接受与我们仍在处理的类具有相同类型Employee的参数?该程序已经有一个空的构造函数和另一个为name传递字符串、为id传递int的构造函数,那么为什么还有一个额外的构造函数比前两个构造函数的作用更大呢?
发布于 2012-02-13 01:50:32
看起来第三个构造函数的目的是复制现有的Employee对象。
你也可以用下面的命令做同样的事情:
new Employee(orig.getName(), orig.getId());但这假设每个属性都有"get“方法。实现一个这样的构造函数,然后调用:
new Employee(orig);然后,如果需要更改Employee的属性,则只需在一个位置更改复制构造函数。
发布于 2012-02-13 01:52:12
这称为复制构造函数,这种构造函数的要点是,您现在可以自由地修改这个新的Employee对象,而不会影响原始对象,反之亦然。
您说得对,new Employee(other)等同于new Employee(other.getName(), other.getId()),但是复制构造函数的版本要短得多,而且意图也更清晰--对于不公开所有状态的更复杂的对象,复制构造函数可以访问另一个构造函数无法访问的细节。此外,如果向Employee添加字段,则不必更改构造函数的所有调用方--使代码更易于维护。
发布于 2012-02-13 01:52:28
正如您所说,第三个构造函数不是必需的,但它是为了方便该类的任何客户端而提供的。
这样写起来更简洁
new Employee(employee)而不是单独传递所有参数。
也可能是必填字段是私有字段,因此创建新Employee实例的代码可能无法访问。您的类就是一个很好的例子,因为它没有公开公开这些属性的公共方法getName()和getId()。
最后,通过传递类的另一个实例,读者可以清楚地看到,我们正在创建一个新类,即原始类的副本或副本。能够清楚地表达这一意图会使维护变得更容易。
https://stackoverflow.com/questions/9251098
复制相似问题