看一段代碼吧。
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混戰。呵呵。