看一段代码吧。
package com.wang.test;
/**
* @author Sam Wang
* @since Mar 22, 2011
*/
// 实现了Cloneable接口,java不要求你实现任何方法 it's a marker
public class TestObject implements Cloneable {
public static void main(String[] args) throws Exception {
TestObject test = new TestObject();
test.clone();// 实现了Cloneable接口的Test对象可以调用Cloneable
int[] arr = { 21, 41, 23, 423, 4, };
arr.clone();
boolean is = arr.getClass() == arr.clone().getClass();
System.out.println(is);// true
Object o = new Object();
o.clone();// Object虽然提供clone方法,但是无法调用。因为是native修饰的。
// 对于String来说,
String str = new String("34534");
str.clone();// 不行,没有实现Cloneable接口。
}
}
// 可以想象Cloneable接口只是一个marker.所有的类都从Object继承,而且protected,
// 所以所有的类都有clone方法,但是无法没有marker的话,就不能调用clone方法。
// 无法了解到int[]的实现,但是int[]可以clone.
// 但是String的类似于clone的功能的method还少吗?
这个混乱的状态有点像size和length。居然还有变态的面试考List取长度是size(),还是length(),亦或是length,或是size?记得ruby语言就有这种混乱。比java还乱.各种方言版的ruby,混战。
玩dota时,大家常说:各种各样的SB混战。呵呵。