首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >传递类的同一类型的参数有什么意义?

传递类的同一类型的参数有什么意义?
EN

Stack Overflow用户
提问于 2012-02-13 01:48:42
回答 6查看 71关注 0票数 3

我看到了一个示例,它试图解释Java中的继承。Employee类是基类,它有三个实例变量和三个构造函数。具体如下:

代码语言:javascript
运行
复制
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的构造函数,那么为什么还有一个额外的构造函数比前两个构造函数的作用更大呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-13 01:50:32

看起来第三个构造函数的目的是复制现有的Employee对象。

你也可以用下面的命令做同样的事情:

代码语言:javascript
运行
复制
new Employee(orig.getName(), orig.getId());

但这假设每个属性都有"get“方法。实现一个这样的构造函数,然后调用:

代码语言:javascript
运行
复制
new Employee(orig);

然后,如果需要更改Employee的属性,则只需在一个位置更改复制构造函数。

票数 5
EN

Stack Overflow用户

发布于 2012-02-13 01:52:12

这称为复制构造函数,这种构造函数的要点是,您现在可以自由地修改这个新的Employee对象,而不会影响原始对象,反之亦然。

您说得对,new Employee(other)等同于new Employee(other.getName(), other.getId()),但是复制构造函数的版本要短得多,而且意图也更清晰--对于不公开所有状态的更复杂的对象,复制构造函数可以访问另一个构造函数无法访问的细节。此外,如果向Employee添加字段,则不必更改构造函数的所有调用方--使代码更易于维护。

票数 1
EN

Stack Overflow用户

发布于 2012-02-13 01:52:28

正如您所说,第三个构造函数不是必需的,但它是为了方便该类的任何客户端而提供的。

这样写起来更简洁

代码语言:javascript
运行
复制
new Employee(employee)

而不是单独传递所有参数。

也可能是必填字段是私有字段,因此创建新Employee实例的代码可能无法访问。您的类就是一个很好的例子,因为它没有公开公开这些属性的公共方法getName()getId()

最后,通过传递类的另一个实例,读者可以清楚地看到,我们正在创建一个新类,即原始类的副本或副本。能够清楚地表达这一意图会使维护变得更容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9251098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档