java 板


LINE

※ 引述《michael47 (hitman)》之銘言: : 請問Object class的method, clone(),的modifier是設為protected, : 對於protected的method,不是只要是該class的descendant就可以call嗎? : 但是所有的objects不是都是Object class的descendants嗎? : 如果是這樣,為何其它的class不能直接使用Object的clone()? 樓上說的沒錯, 這樣設計是為了讓你自行 override clone() 成為 public method, 請參考: http://docs.oracle.com/javase/6/docs/api/java/lang/Cloneable.html http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#clone%28%29 但其實並沒有回答到關於 protected 修飾的部份。 Update! ------- 沒想到回這篇的代價這麼大 XD 在推文被指出錯誤了之後,回頭翻了一下過去的筆記: http://tkcnandy.blogspot.tw/2009/12/java-access-modifiers.html 才發現我今天這篇文章實在是錯得離譜 (遮臉) 我想重點應該是 blog 文章中的第三項,以下是我重新寫成的版本: protected 所修飾之 member, 若其 subclass 與 base class 屬於不同 package, 則可將該 member 視為 subclass 的 private member。 印象中這應該是我在讀 SCJP 聖經本時所做的筆記, 但剛剛試著找了一下,沒有在網路上看到任何類似的描述, 不知道各位是否認同這樣的解釋方式? ------- Update 結束,以下為一開始回的錯誤訊息,閱讀時請多加留意以免被誤導。 根據這裡的定義: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html The protected modifier specifies that the member can only be accessed within its own package (as with package-private) and, in addition, by a subclass of its class in another package. subclass 的部份指的其實是這種情況: --- class Child { public void invokeByChild() throws Exception { super.clone(); // Ok! Access via subclass } } public class Other { public static void main (String [] args) { new Child().clone(); // Error! 你只是持有 (Object 的) subclass // caller 其實是 Other 而不是 Child。 } } --- 其實多想想就會覺得理所當然, 權限肯定要用 caller 來判斷,而不是 refrence 到的 object, 否則豈不是任何一個你持有的 object,都可以直接呼叫 private method 了嗎? XD --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.7.189
1F:推 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)
2F:推 michael47:或者是Object class,為何不能直接呼叫Object的clone()? 03/06 23:24
3F:推 michael47:Object class不是所有class的base class? 03/06 23:27
4F:→ tkcn:我不懂你的 Object class 指的是什麼 03/06 23:29
5F:→ 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)
6F:→ sbrhsieh:原po對 protected 修飾詞的認知是錯誤的 03/06 23:36
7F:→ sbrhsieh:Subobject 只能碰繼承下來的 protected member 03/06 23:38
8F:推 dream1124:是啊,他還覺得別人沒回到他的問題,有中文連結也不看 03/06 23:39
9F:→ sbrhsieh:Not other instances of base class的 protected member 03/06 23:41
10F:推 michael47:很抱歉我有dream1124提供的連結,我的問題跟繼承有關 03/06 23:51
11F:→ michael47:我有看各位提供的連結,我的問題和http://goo.gl/ysLMwY 03/06 23:53
12F:→ michael47:裡面的Anand的問題一樣,很抱歉麻煩大家看一下 03/06 23:55
13F:→ bitlife:「// caller 其實是 Other 而不是 Child 」這行不對 03/07 00:01
14F:→ tkcn:我好像知道我錯在哪了,找一下資料 03/07 00:02
15F:→ bitlife:caller是Child. 會錯是因為protected只能在member中叫用 03/07 00:02
16F:→ bitlife:(當然還有同package) 03/07 00:07
17F:推 PsMonkey:我是路過的 [喂喂],我覺得先不要扯 clone() 會比較好 03/07 00:08
18F:→ tkcn:知道錯誤在哪了,感謝各位指正。 03/07 00:11
為了留下紀錄,但又避免誤導板友,所以我更新在文章前段了。 ※ 編輯: tkcn 來自: 114.34.7.189 (03/07 01:03)
19F:→ tkcn:另求 JLS 對這部份進行說明的章節,我找不到。 03/07 01:54
20F:→ bitlife:更正:我應該誤會了那行的caller的意義,原po應該是指單純的 03/07 10:31
21F:→ bitlife:call stack中的caller function所屬類別.我想成叫用callee 03/07 10:34
22F:→ bitlife:時的「this」的所屬類別 03/07 10:35







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP