如果我们想要克隆子类,父类是否还需要实现Cloneable接口?

时间:2016-09-23 03:58:15

标签: java

如果我想在java中克隆一个对象。所以我必须实现Cloneable接口。但是如果该类是另一个类的子类,那么我必须将父类标记(即实现)为Cloneable。

这有效吗?

public class A{

    private String a;

    public A(String a){
         this.a = a;
    }
}

public class B extends A implements Cloneable{

    private String b;

    public B(String a, String b){
        super(a);
        this.b = b;
    }

    public static void main(String args[]){
        B b1 = new B("a","b");
        B b2 = b1.clone(); 
    }
}

2 个答案:

答案 0 :(得分:0)

,您不需要克隆class B这是一个独立的类而且

  

B类只是继承了A类的属性。

因此它与对象class B对象clone无关。

尝试并检查它是否有效

答案 1 :(得分:0)

Parent类不需要实现Cloneable以使Subclass有资格进行克隆。

任何子类都可以简单地实现Cloneable并覆盖克隆方法,以便有资格进行克隆。

package com.pradeep.java.practise.object;

class A{
    private String name;
    public A() {
        System.out.println("===A()===");
    }
    public A(String name){
        System.out.println("===A(-)===");
        this.name = name;
    }

    @Override
    public String toString() {
        return "A [name=" + name + "]";
    }

}

class B extends A  implements Cloneable{
    private String name;
    public B() {
        System.out.println("===B()===");
    }
    public B(String name){
        System.out.println("===B(-)===");
        this.name = name;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {

        return super.clone();
    }
    @Override
    public String toString() {
        return "B [name=" + name + "]";
    }
}
public class SubclassCloneTest {

    public static void main(String[] args) throws CloneNotSupportedException {

        B b = new B("sub class");
        B clonedB = (B) b.clone();
        System.out.println("original B = "+b);
        System.out.println("cloned B = "+clonedB);

    }

}

输出

===A()===
===B(-)===
original B = B [name=sub class]
cloned B = B [name=sub class]