Re: [問題] private繼承問題

看板java作者 (十年一夢)時間10年前 (2014/07/17 00:54), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串9/17 (看更多)
※ 引述《qrtt1 (有些事,有時候。。。)》之銘言: : 標題: Re: [問題] private繼承問題 : 時間: Wed Jul 16 09:49:27 2014 : : ※ 引述《kiwatami (悠游自在)》之銘言: : ............................................... 43 : : → kiwatami:官方文件有說我就不能問嗎= =? 怎麼感覺你很不想我發言 07/15 22:08 : → Chikei:因為你一直在"你的想法"、"你覺得",這邊是Java版我們在討 07/15 22:59 : → Chikei:論的是Java,那當然所有不清楚的名詞最終都以JLS為標準 07/15 22:59 : → Chikei:現在JLS直接說明了private field就是不會被繼承,或者說這 07/15 23:00 : → Chikei:就是Java the Language的"繼承"定義,你再覺得不合理也請接 07/15 23:00 : → Chikei:受,因為我們是在討論Java語言。 07/15 23:01 : → Chikei:當然要來大戰Java定義的繼承跟一般programmer談到繼承時候 07/15 23:08 : → Chikei:的心靈模型一不一樣不是不可,但很明顯跟原po的問題無關 07/15 23:09 : → TonyQ:其實我覺得都可以討論啦 就是對語意瞭解不一致而已XD 07/16 06:21 : → TonyQ:也沒有人說不能/不想發言,原 po 多心了~ XD 07/16 06:22 : → kiwatami:不好意思 從小到大我覺得不合理的都不會接受... 沒有要吵 07/16 08:58 : → kiwatami:架的意思啦 只是覺得好像講出自己的想法反而不行的感覺 07/16 08:58 : : http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.2 : : Members of a class that are declared private are : not inherited by subclasses of that class. : : 目前問題的關鍵在於 kiwatami 版友 : : 沒有把 field 與 method 的繼承視為獨立事件。 : : : Members of a class 可以是 field 或 method, : : 版上已經接受規格定義的人,是將這二種 member 的繼承與否當成獨立事件 : : : : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.128.164 : ※ 文章網址: http://www.ptt.cc/bbs/java/M.1405475369.A.20D.html : → swpoker:每種語言都有不同的特質~要先放下自己~才能得到世界 07/16 11:44 : → ssccg:我不覺得他的問題跟field和method是不是獨立有關 07/16 12:42 : → ssccg:上一篇回的比較好,問題在inherit是可存取還是存在 07/16 12:43 : → swpoker:k版友的問題在於用自己的角度去理解JAVA~而忽略JAVA特性 07/16 14:29 : → swpoker:繼承是可不用複製貼上就可以存取成員~達到模組化的目的 07/16 14:30 : → swpoker:但是java特別注重在存取成員的特性包括對象及範圍 07/16 14:31 : → swpoker:類別A想套用類別X~那麼不用複製類別X的程式碼~繼承就好了 07/16 14:32 : → swpoker:但是也不代表類別X就要給人看光光~也些東西不可以給人看到 07/16 14:33 : → swpoker:所以根據對象及範圍的不同就有了這四種存取限制 07/16 14:35 : → NewSpec:勸k不要用這種心態來學習語言, 除了遇到瓶頸不容易突破外 07/16 21:05 : → NewSpec:也很容易在熟練某種技術後過於堅持, 而忽略其他技術的優點 07/16 21:07 我的立場比較接近 TonyQ 版僕,我認為沒有必要過度強調哪一個"說法"才是絕對 正確的,畢竟這與你對繼承的定義為何有關。 這裡是 Java 版,你可以說以 Java 官方的說法為準,在討論一些 Java 方面的 主題時,用語使用官方定義的說法是比較好溝通,假如主題已經是與"定義"本身 有關,我覺得只拿"官方說法"出來服人是不夠的。(可能對方根本無法了解或接受 官方說法的內涵) 看得出來 kiwatami 對"繼承"的定義是奠基在成本而非功能/界面上。 我猜他想釐清的是: public class A { private static int n; private int num; } public class B extends A { } 在 runtime B class object 在空間上的成本是否不小於 A class object? B instance 在空間上的成本是否不小於 A instance? 若是的話,該用什麼樣的觀點去看這件事:class B 沒有繼承 class A 定義的 private field 的話,為什麼 B instance( or class object) 會負擔這個成本? 我是先接觸 C++ 後接觸 Java,在學習 C++ 的階段我也曾對何謂"繼承"感到 困惑過,有了一些想法後,在學 Java 時我對就沒有再著重於「Java 中繼承又 是怎麼一回事」。(實際上我不覺得我應該在學習 Java 時再盡力去試著接受或 理解 Java 宣稱的繼承是什麼) 給 kiwatami 與打從心底覺得沒有"繼承"的作用就不應該出現任何影子(任何可以 觀察到沒有被繼承的部分存在都算)者,可以試著參考看看。 我的看法是: 把擴充(繼承)與封裝(access privilege/modifier)當作是兩個正交的面向,Java 的 extends 屬於前者,擴充者承襲了被擴充者的所有內涵,至於擴充者能不能 碰觸這些東西,那是由後者(封裝程度)來決定。 或者是把一個 object 的規格(介面)與實作(內涵)分開來看,CB extends CA 的語意 是 CB 繼承了 CA 的規格與實作(IB extends IA, CB implements IA 則是 IB/CB 繼承了 IA 的規格),CA 的 private fields 是實作的細節,其成為 CB 實作(內涵) 的一部分,而 CA 定義的 private fields 都不屬於 CA 的規格(介面)的一部分, 故也不在 CB 的規格內。而當 CB instance 要去使用自身承襲 CA 而來的那一個 部分時,也必須同去使用另一個 CA instance 般透過其規格來使用。 *這種說法受 protected/package 的影響,特定條件下是說不通的,除非能接受 object 對外界所呈現的規格是浮動的看法(object 的規格非固定,會視觀察者而 改變)。 ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.238.35.96 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1405529694.A.FCF.html ※ 編輯: sbrhsieh (36.238.35.96), 07/17/2014 00:59:02 ※ 編輯: sbrhsieh (36.238.35.96), 07/17/2014 03:19:11
文章代碼(AID): #1JngvU_F (java)
討論串 (同標題文章)
文章代碼(AID): #1JngvU_F (java)