我真的不明白使用重写clone()。如果是浅层和深层克隆,我们可以编写任何方法名称,它可以达到目的。我们也不使用父类(Object) )引用调用克隆方法。然后使用重写请解释。
浅拷贝
global _start
_start:
mov rsi, rsp
mov eax, 0xdeadbeef
mov [rsi], eax
mov dword [rsi+4], 0xbadf00d
;;; memory is set up
firstbreak:
mov [rsi], fs ; 8c 26 16-bit store
;mov dword [rsi], fs ; not encodeable (even in 32-bit mode)
mov qword [rsi], fs ; 48 8c 24 24 YASM chokes, NASM assembles REX.W 8c 26. Still a 16-bit store!!!
mov ax, fs ; 66 8c e0 only modifies AX, leaving upper bits
mov eax, fs ; 8c e0 zeros whole rax
mov rax, fs ; 8c e0 zeros whole rax (YASM: 48 8c e0)
mov r10d, fs ; 41 8c e2 (rex.w=0)
mov r10, fs ; 49 8c e2 (rex.w=1)
xor ebx,ebx
mov eax,1
int 0x80 ; sys_exit(0) (32-bit ABI so you can more easily assemble this as 32-bit code)
深层复制
class Person implements Cloneable {
private String name;
protected Object copy() {//method name is copy
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
public void setName(String name) {
this.name = name;
}
}
public class TestClone {
public static void main(String[] args) {
Person ob1 = new Person();
ob1.setName("Bibhu");
Person ob2 = (Person) ob1.copy();
System.out.println(ob1.getClass() == ob2.getClass());//true
}
}
答案 0 :(得分:0)
它仅适用于惯例。甚至JavaDoc也是如此:
按照惯例,实现此接口的类应该重写 使用公共方法的Object.clone(受保护)。看到 Object.clone()有关重写此方法的详细信息。