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

作者: yoll522 (幽靈)   2014-07-19 00:42:33
※ 引述《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.招喚術(); // 蝸蝓出現了
這樣也沒錯不是嗎@@?
拜託各位幫忙解除小弟的疑問,謝謝大家
作者: LPH66 (-6.2598534e+18f)   2014-07-19 00:44:00
當你要把自來也給別人用時就不一定了別人只知道他拿到一個忍者, 但是叫他用招喚術還是會出現文太
作者: putumaxally (putumaxally)   2014-07-19 01:34:00
應該是對了
作者: jtorngl (Pedrosa go!)   2014-07-19 17:43:00
List<忍者> ninjas = getNinja(String[] nids);你應該不會想用instanceof去檢查instance的實際型別
作者: luoqr (.....)   2014-07-19 18:51:00
照你的宣告法 如果你要同時操作很多Team 那肯定寫的很醜或是Team裡有個大絕招需要三個角色合體完成的話 就會不好寫
作者: yoll522 (幽靈)   2014-07-20 19:13:00
我明白了,謝謝各位的解說

Links booklink

Contact Us: admin [ a t ] ucptt.com