请教一个问题:
public class Ja(){
public int i ;
public void setI( int i ){
this.i = i;
}
public int getI( ){
return i;
}
}
public class Main(){
public static void main(){
Ja ja1 = new Ja();
ja1.setI(9);
Ja ja2 = new Ja();
ja2 = ja1;
// 我试过了,ja2虽然是 new 出来的,但是却是引用的 ja1.
请问怎么复制一份 ja1,而且不是引用呢?
}
}
------解决方案--------------------
浅拷贝:调用Object的clone()方法
深拷贝:重写(覆盖)clone()方法
------解决方案--------------------
- Java code
public class Test { public static void main(String args[]) { Ja ja1 = new Ja(); ja1.setI(9); Ja ja2 = ja1.clone(); // 调用clone方法实现复制 }}class Ja { public int i; public void setI(int i) { this.i = i; } public int getI() { return i; } @Override public Ja clone() { // 自定义的clone方法 Ja a = new Ja(); a.setI(this.getI()); return a; }}
------解决方案--------------------
浅克隆:因为楼主类中没有对象引用,所能用Object的clone()方法 ,你的类应该实现Cloneable接口。
- Java code
class Ja implements Cloneable { public int i; public void setI(int i) { this.i = i; } public int getI() { return i; } @Override public Object clone() throws CloneNotSupportedException { // 自定义的clone方法 return super.clone(); }}public class Test { public static void main(String args[]) { Ja ja1 = new Ja(); ja1.setI(10); Ja ja2 = null; try { ja2 = (Ja)ja1.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 调用clone方法实现复制 System.out.println(ja2.getI()); }}
------解决方案--------------------
调用超类
也就是Cloneable 接口