class cloneClass implements Cloneable{int x=0;int y=9;protected void protectedMethod(){System.out.println("calling ProtectedMethod");}Object getObj() throws CloneNotSupportedException{return clone();}}class extendProtectedClass extends cloneClass{}public class Test{public static void main(String [] args){cloneClass cl=new cloneClass();try{cloneClass cl2=(cloneClass)cl.clone();//通過cl.clone()條用Object.clone()方法出錯(cuò)System.out.println(cl2.x);}catch(CloneNotSupportedException ex){ex.printStackTrace();}/*extendProtectedClass ep=new extendProtectedClass();ep.protectedMethod(); //可以通過子類的對(duì)象直接調(diào)用父類的保護(hù)方法protectedMethod()*/}}問題:為什么不可以直接通過子類的對(duì)象cl.clone()來調(diào)用clone()方法而要通過子類的方法來簡(jiǎn)介調(diào)用我寫的Object.clone()是為了說Object類的clone()方法,不是說通過Object類名來調(diào)用clone()方法。實(shí)際上我是用對(duì)象cl.clone()調(diào)用
2 回答

MYYA
TA貢獻(xiàn)1868條經(jīng)驗(yàn) 獲得超4個(gè)贊
protected Object clone() ;
Object類中定義的clone()方法聲明為protected,只能被同一包下的類及子類調(diào)用,通過cloneClass.clone()調(diào)用因?yàn)闆]有可見的clone()方法,會(huì)提示no such method.
你要通過(cloneClass)cl.clone()調(diào)用的話,在cloneClass內(nèi)中聲明
Object clone() {}重載clone()方法,去掉protected聲明
- 2 回答
- 0 關(guān)注
- 242 瀏覽
添加回答
舉報(bào)
0/150
提交
取消