Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';传递相同类型的类的参数有什么意义?_Java_Inheritance_Constructor - Fatal编程技术网

Java 什么';传递相同类型的类的参数有什么意义?

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){

我看到一个例子,试图解释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
,那么,为什么会有一个额外的构造函数比前两个构造函数的作用要小得多呢?

看起来第三个构造函数是用来复制一个现有的
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++的,但复制构造函数是一般概念)。
此问题还讨论了。

这是为了方便起见,它被称为“复制构造函数”,其中通过复制现有员工实例的属性来创建员工实例