Re: [問題] 以父類別宣告然後以子類別的建構子new

看板java作者 (幽靈)時間10年前 (2014/07/19 00:42), 10年前編輯推噓3(305)
留言8則, 5人參與, 最新討論串7/8 (看更多)
※ 引述《qrtt1 (愚人)》之銘言: : ※ 引述《jb0802 (james)》之銘言: : : 還有一點問題~~所以再發另一篇文~~ : : 這樣與使用 自來也 n = new 自來也(); 所做出來的物件n應該和 : : 忍者 n = new 自來也(); 這兩個應該是一樣的n吧 : : 會有什麼不一樣的地方嗎? : : 另外,如果兩者一樣,我個人的習慣是 當然是把他宣告成 自來也 n=new 自來也(); : : 因為這樣不是讓自己比較清楚它是自來也嗎? : : 有些自來也有且忍者沒有的方法,我也會記得它可以被拿來叫用。 : : 另外一個問題,會使用這樣的原因是因為父類別有abstract的方法 : : 在子類別給實作了才會有這樣的宣告嗎? : 是一樣啊, 不過不夠抽象化 : 當任務來的時候需要任務編組 : Team { : 醫療忍者 m; : 忍者 n; : 隊長 o; : 自來也 p; : } : 醫療忍者需 實作 interface "治療" { 施展治療忍術(); } : ======================================================= : 每次你要組個 Team 自來也都要到, 他怎麼有時間寫小說呢 XD : 而且這樣的設計是不是表示, 沒有自來也 Team 就不完整了呢? : Team { : 醫療忍者 m = new 小櫻(); : 忍者 n = new 鳴人(); : 隊長 o = new 卡卡西(); : } : Team { : 醫療忍者 m = new 小櫻(); : 忍者 n = new 鳴人(); : 隊長 o = new 自來也(); : } : Team { : 醫療忍者 m = new 綱手(); : 忍者 n = new 自來也(); : 隊長 o = new 飛猿(); : } : 只要型別對了, 自來也可以出現在任何位置, Team 的安排也能很自由 : 不會因為少了自來也而不能組 Team 不好意思,推了一個2008年的古文@@ 這兩天在學java也遇到了同樣的問題,雖然全部回文都看完了,卻還是有點疑問存在 我想請問說,既然我寫程式的人都知道說我就是要用自來也, 那為什麼我就不要直接寫 自來也 n = new 自來也(); 呢? 看了上述的任務邊組的例子後還是有點不懂, 如果說現在要組一個team Team { 醫療忍者 m = new 綱手(); 忍者 n = new 自來也(); 隊長 o = new 飛猿(); } 就好像說,我都知道鋼手要當醫療忍者了,也知道飛猿要當隊長 那為什麼寫程式時不就乾脆寫成 Team { 鋼手 m = new 綱手(); 自來也 n = new 自來也(); 飛猿 o = new 飛猿(); } 這樣呢? 如果忍者這父類別有一個abstract的招換術需要子類去定義他 那繼承忍者的所有類別,都一定會去定義招換術不是嗎? 那既然繼承的子類都定義了,那麼所有的方法也都可以安心使用不是嗎@@? 就像前面的文章所說的 忍者 n = new 自來也(); 忍者 m = new 綱手(); n.招喚術(); // 文太出現了 m.招喚術(); // 蝸蝓出現了 因為自來也、鋼手都是繼承忍者的,所以他們肯定會定義招換術,那麼程式寫成 自來也 n = new 自來也(); 鋼手 m = new 綱手(); n.招喚術(); // 文太出現了 m.招喚術(); // 蝸蝓出現了 這樣也沒錯不是嗎@@? 拜託各位幫忙解除小弟的疑問,謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.159.8.95 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1405701757.A.583.html

07/19 00:44, , 1F
當你要把自來也給別人用時就不一定了
07/19 00:44, 1F

07/19 00:44, , 2F
別人只知道他拿到一個忍者, 但是叫他用招喚術還是會出現文太
07/19 00:44, 2F
請問這個別人,是說另外一個寫程式的人嗎? 可是如果說別人要用到別的忍者時,他如果想用鋼手,那麼他不就可以改成 鋼手 n = new 鋼手(); 這樣嗎@@? ※ 編輯: yoll522 (49.159.8.95), 07/19/2014 01:03:33 突然間想到,還是說其實這跟寫程式的一方無關,而是跟執行時有關? 就假設說這是一個遊戲,剛開始要讓使用者選角 忍者 role; int index = 取得使用者選的角色; switch(index){ case 1: role = new 自來也(); break; case 2: role = new 鋼手(); break; } 會是這樣嗎@@? 還是我一樣理解錯誤ˇ_ˇ ※ 編輯: yoll522 (49.159.8.95), 07/19/2014 01:06:06

07/19 01:34, , 3F
應該是對了
07/19 01:34, 3F

07/19 17:43, , 4F
List<忍者> ninjas = getNinja(String[] nids);
07/19 17:43, 4F

07/19 17:45, , 5F
你應該不會想用instanceof去檢查instance的實際型別
07/19 17:45, 5F

07/19 18:51, , 6F
照你的宣告法 如果你要同時操作很多Team 那肯定寫的很醜
07/19 18:51, 6F

07/19 18:53, , 7F
或是Team裡有個大絕招需要三個角色合體完成的話 就會不好寫
07/19 18:53, 7F

07/20 19:13, , 8F
我明白了,謝謝各位的解說
07/20 19:13, 8F
文章代碼(AID): #1JoKvzM3 (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 7 之 8 篇):
文章代碼(AID): #1JoKvzM3 (java)