Re: [問題] Object的clone()問題
※ 引述《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
03/07 11:59, 1F
推
03/07 12:02, , 2F
03/07 12:02, 2F
→
03/07 12:04, , 3F
03/07 12:04, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 10 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章