推 michael47:我的意思是所有的class都是Object class的subclass 03/06 23:21
是呀,所有的 class 都可以呼叫自身所對應的 object 的 clone(),
但不能呼叫其他物件的 clone()。
---
public class Other {
public static void main (String [] args) {
new Object().clone(); // (1)
try {
new Other().clone(); // (2)
} catch (CloneNotSupportedException e) {}
}
}
---
(1) 會 compile error,但 (2) 是 ok 的。
※ 編輯: tkcn 來自: 114.34.7.189 (03/06 23:27)
推 michael47:或者是Object class,為何不能直接呼叫Object的clone()? 03/06 23:24
推 michael47:Object class不是所有class的base class? 03/06 23:27
→ tkcn:我不懂你的 Object class 指的是什麼 03/06 23:29
→ michael47:請注意Object的O是大寫 03/06 23:30
越聽越糊塗,我猜你說的是 Object 這個類別,
但 "這個類別不能直接呼叫 Object 的 clone()" 指的是什麼?
是說 Object 中的 static method 不能呼叫 clone()?
還是 Object 中的 instance method 不能呼叫 clone()?
但實際上兩者都可以。
如果你指的是其他情況,建議你還是附上 code 吧。
※ 編輯: tkcn 來自: 114.34.7.189 (03/06 23:37)
→ sbrhsieh:原po對 protected 修飾詞的認知是錯誤的 03/06 23:36
→ sbrhsieh:Subobject 只能碰繼承下來的 protected member 03/06 23:38
推 dream1124:是啊,他還覺得別人沒回到他的問題,有中文連結也不看 03/06 23:39
→ sbrhsieh:Not other instances of base class的 protected member 03/06 23:41
推 michael47:很抱歉我有dream1124提供的連結,我的問題跟繼承有關 03/06 23:51
→ michael47:裡面的Anand的問題一樣,很抱歉麻煩大家看一下 03/06 23:55
→ bitlife:「// caller 其實是 Other 而不是 Child 」這行不對 03/07 00:01
→ tkcn:我好像知道我錯在哪了,找一下資料 03/07 00:02
→ bitlife:caller是Child. 會錯是因為protected只能在member中叫用 03/07 00:02
→ bitlife:(當然還有同package) 03/07 00:07
推 PsMonkey:我是路過的 [喂喂],我覺得先不要扯 clone() 會比較好 03/07 00:08
→ tkcn:知道錯誤在哪了,感謝各位指正。 03/07 00:11
為了留下紀錄,但又避免誤導板友,所以我更新在文章前段了。
※ 編輯: tkcn 來自: 114.34.7.189 (03/07 01:03)
→ tkcn:另求 JLS 對這部份進行說明的章節,我找不到。 03/07 01:54
→ bitlife:更正:我應該誤會了那行的caller的意義,原po應該是指單純的 03/07 10:31
→ bitlife:call stack中的caller function所屬類別.我想成叫用callee 03/07 10:34
→ bitlife:時的「this」的所屬類別 03/07 10:35