看板 java 關於我們 聯絡資訊
小弟也想發表一下拙見,跟大家交流一下 前情提要: 小弟是從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)
michael47:這樣真的可以嗎?我有空測試一下,感謝分享 03/07 17:32
swpoker:B!B!不可以這樣~ 03/07 17:34
PsMonkey:其實有時候這招蠻好用的 [被毆飛] 03/07 17:39
michael47:我試了一下,好像不行,會看不到clone() 03/07 17:52
tails32100:我是有測試過可以才放上來的 :( 03/07 18:35
tails32100:只是Eclipse叫我要打try catch 我懶得打XD 03/07 18:36
tkcn:這招可以過 compile,但是大概過不了 code review....XD 03/07 18:54
michael47:加上try跟catch有過compile,但run時有錯誤訊息 03/07 19:32
tails32100:等等 這版標不科學啊!! 03/09 00:37
PsMonkey:敢說版標不科學,想在水桶裡決鬥嗎? [完全誤] 03/09 01:50
tails32100:我先覆蓋一個class,結束這回合 03/09 22:12
swpoker:招喚decompiler,破解對方的class 03/10 12:09