方法1:
class FirstLevel implements Cloneable { @Override public String toString() { return "FirstLevel{" + "i=" + i + ", j=" + j + ", sec=" + sec + '}'; } int i; int j; SecondLevel sec; @Override public FirstLevel clone() throws CloneNotSupportedException { FirstLevel firstLevel = (FirstLevel) super.clone(); sec = (SecondLevel) sec.clone(); return firstLevel; } public FirstLevel(int i, int j, SecondLevel sec) { this.i = i; this.j = j; this.sec = sec; } } class SecondLevel implements Cloneable { @Override public String toString() { return "SecondLevel{" + "j=" + j + ", third=" + third + '}'; } @Override protected Object clone() throws CloneNotSupportedException { SecondLevel secondLevel = (SecondLevel) super.clone(); third = third.clone(); return secondLevel; } double j; ThirdLevel third; public SecondLevel(double j, ThirdLevel third) { this.j = j; this.third = third; } } class ThirdLevel implements Cloneable { @Override public String toString() { return "ThirdLevel{" + "k=" + k + '}'; } @Override protected ThirdLevel clone() throws CloneNotSupportedException { return (ThirdLevel) super.clone(); } int k; public ThirdLevel(int k) { this.k = k; } }
方法2:
package com.dying.Javabasic.homework0327; // 深拷贝 public class homework2 { public static void main(String[] args) throws CloneNotSupportedException { ThirdLevel thirdLevel = new ThirdLevel(3); SecondLevel secondLevel = new SecondLevel(2, thirdLevel); FirstLevel firstLevel = new FirstLevel(0, 1, secondLevel); FirstLevel a = firstLevel.clone(); a.sec.third.k = 10; a.sec.j = 10; a.i = 10; a.j = 10; System.out.println("我是复制体:" + a); System.out.println("我是本体:" + firstLevel); } } class FirstLevel implements Cloneable { @Override public String toString() { return "FirstLevel{" + "i=" + i + ", j=" + j + ", sec=" + sec + '}'; } int i; int j; SecondLevel sec; @Override public FirstLevel clone() throws CloneNotSupportedException { FirstLevel firstLevel = (FirstLevel) super.clone(); sec.third = sec.third.clone(); sec = sec.clone(); return firstLevel; } public FirstLevel(int i, int j, SecondLevel sec) { this.i = i; this.j = j; this.sec = sec; } } class SecondLevel implements Cloneable { @Override public String toString() { return "SecondLevel{" + "j=" + j + ", third=" + third + '}'; } @Override protected SecondLevel clone() throws CloneNotSupportedException { return (SecondLevel) super.clone(); } double j; ThirdLevel third; public SecondLevel(double j, ThirdLevel third) { this.j = j; this.third = third; } } class ThirdLevel implements Cloneable { @Override public String toString() { return "ThirdLevel{" + "k=" + k + '}'; } @Override protected ThirdLevel clone() throws CloneNotSupportedException { return (ThirdLevel) super.clone(); } int k; public ThirdLevel(int k) { this.k = k; } }