Java 什么';传递相同类型的类的参数有什么意义?
我看到一个例子,试图解释Java中的继承。Employee类是基类,它有三个实例变量和三个构造函数。详情如下:Java 什么';传递相同类型的类的参数有什么意义?,java,inheritance,constructor,Java,Inheritance,Constructor,我看到一个例子,试图解释Java中的继承。Employee类是基类,它有三个实例变量和三个构造函数。详情如下: public class Employee{ private String name; private int id; public Employee(){ name = " No Name!"; id = 00100; } public Employee(String n, int i){
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
,那么,为什么会有一个额外的构造函数比前两个构造函数的作用要小得多呢?看起来第三个构造函数是用来复制一个现有的Employee
对象的
您可能可以对以下各项执行相同的操作:
new Employee(orig.getName(), orig.getId());
但这假定每个属性都有“get”方法。实现这样一个构造函数,然后调用:
new Employee(orig);
然后,如果Employee
的属性需要更改,则只需在一个位置更改复制构造函数。这称为复制构造函数,此类构造函数的要点是,您现在可以自由修改此新的Employee
对象,而不影响原始对象,反之亦然
正确的说法是,
newemployee(other)
相当于newemployee(other.getName(),other.getId())
,但是复制构造函数版本要短得多,目的也要清楚得多——对于不公开其所有状态的更复杂对象,副本构造函数可以访问其他构造函数无法访问的详细信息。此外,如果您向Employee
添加字段,则不必更改构造函数的所有调用方,从而使代码更易于维护。它是一个复制构造函数-当我们需要创建实例副本时,它是clone()
的首选替代方法。第三个构造函数不是必需的,正如您所说,但它是为方便此类客户机而提供的
写起来更简洁
new Employee(employee)
而不是单独传递所有参数
还可能是必填字段是私有字段,因此创建新的员工
实例的代码可能无法访问这些字段。您的类就是一个很好的例子,因为它没有公开这些属性的公共方法getName()
和getId()
最后,通过传递该类的另一个实例,读者可以清楚地看到,我们正在创建一个新类,即原始类的副本或副本。能够清晰地表达意图,维护更容易。< /P> < P>被称为(文章是C++的,但复制构造函数是一般概念)。
此问题还讨论了。这是为了方便起见,它被称为“复制构造函数”,其中通过复制现有员工实例的属性来创建员工实例