看一段代碼吧。
package com.wang.test;
/**
* @author Sam Wang
* @since Mar 22, 2011
*/
// 實(shí)現(xiàn)了Cloneable接口,java不要求你實(shí)現(xiàn)任何方法 it's a marker
public class TestObject implements Cloneable {
public static void main(String[] args) throws Exception {
TestObject test = new TestObject();
test.clone();// 實(shí)現(xiàn)了Cloneable接口的Test對象可以調(diào)用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方法,但是無法調(diào)用。因?yàn)槭莕ative修飾的。
// 對于String來說,
String str = new String("34534");
str.clone();// 不行,沒有實(shí)現(xiàn)Cloneable接口。
}
}
// 可以想象Cloneable接口只是一個(gè)marker.所有的類都從Object繼承,而且protected,
// 所以所有的類都有clone方法,但是無法沒有marker的話,就不能調(diào)用clone方法。
// 無法了解到int[]的實(shí)現(xiàn),但是int[]可以clone.
// 但是String的類似于clone的功能的method還少嗎?
這個(gè)混亂的狀態(tài)有點(diǎn)像size和length。居然還有變態(tài)的面試考List取長度是size(),還是length(),亦或是length,或是size?記得ruby語言就有這種混亂。比java還亂.各種方言版的ruby,混戰(zhàn)。
玩dota時(shí),大家常說:各種各樣的SB混戰(zhàn)。呵呵。