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

看板java作者 (十年一夢)時間11年前 (2014/03/07 02:56), 編輯推噓2(201)
留言3則, 1人參與, 最新討論串7/10 (看更多)
※ 引述《michael47 (hitman)》之銘言: : public class foo { : int count; : } : public class Demo { : public static void main(String[] args) { : foo foo1 = new foo(); : foo foo2 = foo1.clone(); : /* 這裡呼叫的是Object class的clone() */ : /* 不是所有的objects都有繼承到Object class的clone()嗎? */ : /* 但是這樣好像不可以 */ : } : } : 我舉例的code很簡略,我的問題是為何不能直接使用Object的clone(), : Object的clone()不是protected,所有的objects不是Object class以及 : Object class的subclass的instances,為何不能直接使用Object的clone()? 既然 protected 的意義是 package default 的部份放寬,那麼就先說一下 package default 的部份。 當在 class A 的 context 下要存取 class B 的 package default member P, 假如定義 P 的 class 與 A 是處於同一個 package,那麼此存取是允許的; 若定義 P 的 class 與 A 處於不同 package,則此存取是被禁止的。 對於 protected member M,大致上和 P 相同,加上一個放寬的條件是: 在 class A context 下,當去存取自身或同一類的物件的 memebr M,若這個 M 是定義在 A 的任一個 base class C 裡,則此存取也是被允許的(不論 A 與 C 是不是在同一個 package)。 這個放寬必須在藍色存在的條件下,而不是單單去放寬紅色的部份。換句話說, 一個 object 可以存取自己身上或同類身上那份繼承而來的 protected member, 放寬的也儘儘如此而已。存取其他的 class 的 protected member 則等同存取 package default member。 那麼 class A 從 Object 繼承了 protected clone member,儘管 class A 與 Object 處於不同的 package 內,在 class A context 下去存取任一個 A object 的 clone member 是可以的,但不是存取其他 class 的 clone member 都可以(假如沒有再定義放寬成 public)。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.238.37.104 ※ 編輯: sbrhsieh 來自: 36.238.37.104 (03/07 02:57)

03/07 11:59, , 1F
藍色的部份是說subclass本身也要有member M才可以嗎?
03/07 11:59, 1F

03/07 12:02, , 2F
所以我上面使用clone()方式要是foo有自己定義clone()
03/07 12:02, 2F

03/07 12:04, , 3F
然後在foo的clone()裡面使用super.clone()這樣就可以嗎?
03/07 12:04, 3F
文章代碼(AID): #1J6CJ7wo (java)
討論串 (同標題文章)
文章代碼(AID): #1J6CJ7wo (java)