用抽象clone()方法克隆超类

时间:2018-04-18 03:17:45

标签: java inheritance clone

代码中的问题是我们不能直接为类型clone调用抽象方法Item而我不想修改Item类。有什么办法,或者我应该改变我的逻辑?

 abstract class Item implements Cloneable {

    private boolean stackable; 
    protected String name; 

    public Item()
    {
        this.name      = new String( "Air" );
        this.stackable = true;
    }
    public Item( String name )
    {
        this.name      = name;
        this.stackable = true;
    }
    public abstract Item clone();
}




class Tool extends Item {

    protected double durability; 

    public Tool()
    {
        super("", false);
        this.durability    = 0;          
    }
    public Tool(Tool src)
    {   
        this.durability    = src.durability;              
    }

    public Item clone() throws CloneNotSupportedException {

         Object obj = super.clone();   //problem is here

        return (Item) obj;
   }
}

4 个答案:

答案 0 :(得分:1)

我以某种方式删除了您的错误

修改

     [,1] [,2]
[1,]    1    2
[2,]    1    2
[3,]    1    2

答案 1 :(得分:0)

使用Cloneable接口实现工具类并覆盖clone()

答案 2 :(得分:0)

p

答案 3 :(得分:0)

您可以使用反射来识别对象中是否存在克隆方法。 也许您也可以使用可克隆的界面标记您的类,以明确说明是否存在一种方法,因此您可以首先使用instanceof运算符cuz检查该方法,据我所知,反射与性能有关。

对我来说,它看起来像是Java的常规设计, 我还希望cloneable-interface应该包含对clonemethod本身的签名,但这不是我的三通。

希望这会有所帮助, 祝你有一天