作者godfat (godfat 真常)
看板java
標題Re: 程式語言文法簡化 (was: [問題] 從文字檔讀取먠…
時間Fri Aug 21 15:00:23 2009
一些補充 XD
有時候會覺得有些人好像會把一些補充心得之類的回覆,
看成是一種反駁... 所以聲明一下,沒針對什麼。
※ 引述《adrianshum (Alien)》之銘言:
: 比如 C# 在 override 的時候要加上 override
: keyword (現在 java 也可以加 @Override 了,
: 不過相比之下 C# 的做法比較好), 雖然 99% 的情
: 況下, 你都是要override 的, 但萬一有一次, 你
: 其實是想建一個新 method, 怎麼不小心和 super
: class 的 method 同名了, compiler 就可以靠著
: 你少打這字提出 warning/error.
這點我有同感,Scala 也是要求「一定要」寫 override.
我曾經在寫 C++ 時,執行起來覺得很奇怪,
一直沒有叫到我要的 method, 檢查半天才發現,
method signature 有點相異,沒有被視為 override,
變成 overloading. compile 時不會有任何警告。
但如果一定要寫 override, signature 不對時,
compiler 會告訴你 you override nothing...
不過 C++ 的 virtual, 也有一點 @Override 的味道在。
比方說原本就沒有設計要做 virtual method,
就算 subclass 誤用到同名 method + signature,
也不會因此 override 到不該 override 的東西。
當然啦,virtual 的設計是拿來做最佳化,跟 @Override 關係不大就是了。
: public 要 explicit, 某程度我覺得是由 C++
: 或其他 OOP 的做法帶過來, 但當初別人決定 public
: 雖然是最常用但還是要 explicitly 聲明, 很可能就
: 是因為他們覺得東西不該隨意給其他人看到, 除非你
: 真的想給別人看. 萬一有人是忘了給 accessibility
: modifier 而不是故意不給的話, 那東西就不該給其他
: 人看到, 所以 C++ 是當成 private, Java 可能因為覺
: package 內或 child class 的都是 "自家人" 所以把
: accessibilty 侷限在這.
C++ 不會有這樣囉嗦的問題,是因為 public: 之後全是 public,
而 Java 卻要全部都打出來。因此 C++ class 預設 private,
感覺是沒什麼差。而 Java 的 protected...
Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
為什麼沒這個 Y N Y N
我還是不懂... 這樣看起來,Java 是把 package 視為比
subclass 更狹小的範圍。可能因為我 Java 寫太少吧 XD
只是因為 C++ 的使用習慣,實在不覺得 protected 應該被
同個 package 的 class 存取。除非,我用一大堆 package,
每個 package 可能只放 subclass 這樣 :p
但這樣也未免太麻煩了一點,畢竟 package 也會影響
source path. 而下 class path, 那會更恐怖。
--
「行け!Loki!」
(rocky ロッキー)
-Gurumin ぐるみん 王子? XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18
推 ogamenewbie:package 比 subclass 更親近, 像家人跟朋友的差別. 08/21 15:26
→ adrianshum:樓上: 我反而覺得 subclass 才像家人,畢竟"血統"有關連 08/21 18:11
推 ogamenewbie:你寫你自己一家, 我 extend 你家的sub是我家不是你家. 08/21 18:19
→ adrianshum:當extend,就是 is-a 的關係了,is-a怎都比非is-a親近吧 08/21 18:52
推 ogamenewbie:所以你對我寫的sub的信任程度高過你自己本家package? 08/21 18:56
推 ogamenewbie:你在想的是你自己弄 package 跟 subclass... 08/21 18:58
推 ogamenewbie:請想想一群公司/團體/個人自己分別有 package... 08/21 18:58
→ ogamenewbie:互相 extend 來 extend 去的情況. 08/21 18:59
→ adrianshum:package 作為logical grouping,說是親近我實在不能苟同 08/21 19:07
→ MonyemLi:java該是希望少用extends的,在這情況下,到處都interfac 08/22 08:37
→ MonyemLi:只允許同package底下的class存取是很有幫助的 08/22 08:39
→ MonyemLi:java有蠻多實作,你去複製原始碼貼到你的程式會不能用 08/22 08:41
→ MonyemLi:因為他跟你的package不同,叫不到...以上是我個人心得 08/22 08:43
→ MonyemLi:話說推文的等待時間太長了吧...1分鐘 08/22 08:46
→ qrtt1:搬去同一個社區就可以用他的資源了 XD 08/22 08:56