clone方法-Object的clone()方法为什么要存在?这个方法不是更简单吗?请指教,谢谢!

问题描述

Object的clone()方法为什么要存在?这个方法不是更简单吗?请指教,谢谢!

当我看到Object的clone方法时产生了一个问题:
为什么要用clone方法呢?我完全可以在该类中定义一个方法,在在该方法返回中返回一个该类本身的实例即可。就像下面这个例子:

package excercise.inheritance;

public class Override {

public static void main(String[] args) {
    Chicken chicken=new Chicken("vivid","red");

    System.out.println(chicken.getName()+" "+chicken.getCrest());
    Chicken chickenCP=chicken.getCopied();

//这和clone有什么区别吗?
chickenCP.setCrest("blue");
chickenCP.setName("leo");
System.out.println(chickenCP.getName()+" "+chickenCP.getCrest());

    System.out.println(chicken.getName()+" "+chicken.getCrest());
}

}

class Bird{
protected String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Bird(String name){
    this.name=name;
}

public Bird getCopied(){
    return new Bird(name);

//不必要用clone呀,我可以直接返回一个实例不就行了吗?

}

}

class Chicken extends Bird{

protected String crest;

public String getCrest() {
    return crest;
}

public void setCrest(String crest) {
    this.crest = crest;
}

public Chicken(String name,String crest) {
    super(name);
    // TODO Auto-generated constructor stub
    this.crest=crest;
}

public Chicken getCopied(){//返回的类为基类的返回类的派生类
    return new Chicken(name,crest);
    }

}

时间: 2024-08-02 01:14:03

clone方法-Object的clone()方法为什么要存在?这个方法不是更简单吗?请指教,谢谢!的相关文章

生成编码-C#生成ID编码的方法 在线等 请指教 谢谢

问题描述 C#生成ID编码的方法 在线等 请指教 谢谢 后台生成, 辖区编码+4位顺序号 辖区编码可获得 然后4位顺序编码,怎么才能在后台实现呢,最好能从0000开始 1000开始也行 数据库存储过程 以及语句不熟悉 尽量后台 方法实现! 谢谢 在线等..... 解决方案 http://bbs.csdn.net/topics/390428913 解决方案二: string code=""我是辖区编码""; Enumerable.Range(1000100).Sele

java object 之clone方法全面解析_java

 1 protected native Object clone() throws CloneNotSupportedException;  1.方法由native关键字修饰 java中的native关键字表示这个方法是个本地方法,[java native说明].而且native修饰的方法执行效率比非native修饰的高. 2.方法由protected修饰 一个类在覆盖clone()方法时候,需要修改成public访问修饰符,这样才能保证其他所有的类都能够访问这个类的这个方法. 3.方法抛出Cl

c#-有什么好的方法把CSV格式导入到SQL数据库中?有代码更加好,或者指教思路也可以,感谢啦!

问题描述 有什么好的方法把CSV格式导入到SQL数据库中?有代码更加好,或者指教思路也可以,感谢啦! 有什么好的方法把CSV格式导入到SQL数据库中?有VB.NET或者C#代码更加好,或者指教思路也可以,感谢啦! 解决方案 1.用SQL自带的工具(导入导出数据)就可以2.不代码的话,每次读一行,按','进行Split成为一个数组,写入数据库就可以了 解决方案二: csv其实就是txt.你可以当成文本一行一行的处理.写数据库用ado.net就是了. 解决方案三: 代码就是一行行读取,用逗号作为格列

Javascript中定义方法的另类写法(批量定义js对象的方法)_javascript技巧

复制代码 代码如下: isArray : function(v){ return toString.apply(v) === '[object Array]'; }, isDate : function(v){ return toString.apply(v) === '[object Date]'; }, isObject : function(v){ return !!v && Object.prototype.toString.call(v) === '[object Object]

C#中派生类的方法里的匿名delegate调用基类的方法会产生无法验证的代码

看来阅读一个开发人员的blog是获取知识的一个捷径,特别是当那位开发人员负责的产品是你天天都用的基础设施之一,例如说--编译器.在阅读Eric Lippert的blog时,我无意中了解到了很多我以前所不熟悉的知识,例如说一些语言特性,一些编程思想之类:但更有趣的,我了解到了很多他所负责的产品中的诡异地方. 开篇花絮: 假如我们现在有一个枚举类型E,其中有一个枚举值的名字是x. 你或许知道这个表达式是对的: C#代码 0 | E.x 但是你或许不知道这个表达式(根据语言规范应该)是错的: C#代码

jQuery使用after()方法在元素后面添加多项内容的方法

 这篇文章主要介绍了jQuery使用after()方法在元素后面添加多项内容的方法,实例分析了jQuery中after方法的功能及在元素后面添加内容的技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了jQuery使用after()方法在元素后面添加多项内容的方法.分享给大家供大家参考.具体分析如下: jQuery可通过after()方法在元素后面添加多项内容,after()可以带多个参数,在指定元素后面添加多项内容 ? 1 2 3 4 5 6 7 8 9 10 11 12 13

java-Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了!

问题描述 Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了! Java中在同一个类中把一个方法中的数组元素传到另一个方法中,怎么传啊?麻烦大家说一下,谢谢了! 麻烦大家了 解决方案 直接作为参数传就是了 void f1() { int[] x = {1,2,3,4,5}; f2(x[1]); } void f2(int n) { } 解决方案二: Spring AOP代理机制以及方法调用在同一个类的另一个方法的问题 解决方案三: 可以使用全局变量的方

struts2中访问指定了方法,但是却把action下所有的方法都执行了一次这是怎么回事啊

问题描述 struts2中访问指定了方法,但是却把action下所有的方法都执行了一次这是怎么回事啊 具体配置如下图 xml配置如下: jsp如下: action如下: 解决方案 你的BaseAction是自定义的吧,还是哪个别的第三方包的,常用的是继承struct自带的MappingDispatchAction,这个是和struct.xml搭配来用,你也可以继承MappingDispatchAction这个类,然后再写你的action模式 解决方案二: 那应该就是你调用的函数getByPage

java-抽象类 子类实现相同方法 想想去执行抽象类中的方法,在从抽象类中调用子类具体方法

问题描述 java-抽象类 子类实现相同方法 想想去执行抽象类中的方法,在从抽象类中调用子类具体方法 如下代码,想得到这样结果execute AA before execute..C execute AA after 应该怎么处理 public class Test { public static void main(String[] args) { C c = new C(); c.A(); } } interface YY { public void A(); } abstract clas