Re: [問題] Object的clone()問題

看板java作者 (Tails)時間11年前 (2014/03/07 13:05), 編輯推噓5(507)
留言12則, 5人參與, 最新討論串9/10 (看更多)
小弟也想發表一下拙見,跟大家交流一下 前情提要: 小弟是從PHP 5.2 轉來寫Java (Android) 的 PHP 5.2的OOP並沒有package的概念,也沒有nested class 但public, protected, private的概念是一樣的 有一點比較特別的是 PHP OOP 的 $this 是不能省略的,一定要打 Java 的 this 可以省略,只要在scope裡沒有宣告該變數,它就會是Member 而呼叫superclass的method時,PHP一樣是用$this Java 是改用 super 關鍵字 正文開始: 那就小弟的理解,其實很簡單 我們把Visibility直譯就行了--看得到部分 public 相信沒什麼好爭的,資訊公開,所有class都能access得到 所以我們可以像這樣存取它: var.member var.method() this.member this.method() super.method() protected 簡單來說,能看得到它的,就只有繼承它的class而已 所以我們需要用this才能access得到它,像這樣存取它: this.member this.method() super.method() private 除了跟project一樣要用this之外,還要在同一個class(file)裡才能存取的到 this.member this.method() 所以現在我們知道Object#clone()一開始是宣告protected了 只要沒有 override 它的能見度,就不能用 var.clone() 的方式去access 但我們可以用 super.clone() 或 this.clone() (有override的時候) 去access super.clone() 也只有Object的子類能用 那最後,一樣是繼承 Object 的 ClassA 和 ClassB ,為什麼在A裡面不能用 objB.clone(); 原因只有一個,因為 ClassB 沒有 override clone()的能見度 ClassB 不想公開clone()錯了嗎XD 那package(default)的部分,小弟就不大懂了 小弟只知道,如果上面三個都沒有宣告,就是package了 但因為clone()在 Object就是被宣告為 protected 了 所以好像也跟package無關了.... 以上為小弟的拙見 有錯盡量鞭 <(_ _)> 補充 剛仔細看了一下 tkcn 大和 PsMonkey 大的文 所以如果要跟 package 的概念有相關的話 package 就必須要是 java.lang 也就是像這樣: package java.lang; public class Test { public static void main(String[] args) { Object obj = new Object(); obj.clone(); // 這樣就可以呼叫了 } } -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.72.45 ※ 編輯: tails32100 來自: 220.134.72.45 (03/07 13:06) ※ 編輯: tails32100 來自: 220.134.72.45 (03/07 13:06) ※ 編輯: tails32100 來自: 220.134.72.45 (03/07 13:20)

03/07 17:32, , 1F
這樣真的可以嗎?我有空測試一下,感謝分享
03/07 17:32, 1F

03/07 17:34, , 2F
B!B!不可以這樣~
03/07 17:34, 2F

03/07 17:39, , 3F
其實有時候這招蠻好用的 [被毆飛]
03/07 17:39, 3F

03/07 17:52, , 4F
我試了一下,好像不行,會看不到clone()
03/07 17:52, 4F

03/07 18:35, , 5F
我是有測試過可以才放上來的 :(
03/07 18:35, 5F

03/07 18:36, , 6F
只是Eclipse叫我要打try catch 我懶得打XD
03/07 18:36, 6F

03/07 18:54, , 7F
這招可以過 compile,但是大概過不了 code review....XD
03/07 18:54, 7F

03/07 19:32, , 8F
加上try跟catch有過compile,但run時有錯誤訊息
03/07 19:32, 8F

03/09 00:37, , 9F
等等 這版標不科學啊!!
03/09 00:37, 9F

03/09 01:50, , 10F
敢說版標不科學,想在水桶裡決鬥嗎? [完全誤]
03/09 01:50, 10F

03/09 22:12, , 11F
我先覆蓋一個class,結束這回合
03/09 22:12, 11F

03/10 12:09, , 12F
招喚decompiler,破解對方的class
03/10 12:09, 12F
文章代碼(AID): #1J6LEMRU (java)
文章代碼(AID): #1J6LEMRU (java)