如果我想在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();
}
}
答案 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]