Re: [問題] Object的clone()問題
小弟也想發表一下拙見,跟大家交流一下
前情提要:
小弟是從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
03/07 17:34, 2F
推
03/07 17:39, , 3F
03/07 17:39, 3F
推
03/07 17:52, , 4F
03/07 17:52, 4F
→
03/07 18:35, , 5F
03/07 18:35, 5F
→
03/07 18:36, , 6F
03/07 18:36, 6F
→
03/07 18:54, , 7F
03/07 18:54, 7F
推
03/07 19:32, , 8F
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
03/09 22:12, 11F
→
03/10 12:09, , 12F
03/10 12:09, 12F
討論串 (同標題文章)
完整討論串 (本文為第 9 之 10 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章