Re: [問題] 繼承、界面、抽象

作者: cyclone350 (老子我最神)   2015-04-10 22:50:56
※ 引述《MephistoH (默非斯托)》之銘言:
: 動物會叫, 但各有各的叫法
: 在叫的時候, 就用介面~
: "其實abstract class表示的是"is a"關係,interface表示的是"like a"關係
第一次看到 like-a ...
不認為 interface 是 like-a ...
直接提我實作的看法及個人經驗,如有錯誤歡迎指證
目前實作上會用到 abstract 通常都是 Template Method 模式
從良葛格網站例子的 GuessGame 來看就明白
http://openhome.cc/Gossip/DesignPattern/TemplateMethod.htm
而我通常不會以 abstract class 當作頂層 class
(當然也是會有 abstract class 當頂層的時候)
我的話會製作一個 interface Game,有個方法 go()
GuessGame 會 implements Game
而玩 game 就會是
Game myGame = new ConsoleGame();
myGame.go();
若你有其他模式的 Game 如 PartyGame
你也可以 implements Game 做自己的 Party template
game 要可以玩 (go),或是要可以讀取進度 (load),都是一個行為
自然就是 inteface 定義行為
而 GuessGame 或 PartyGame 是 template,自然就是 abstract
如果你有用到一些open source,他們class結構通常都是如此
用 abstract 當作 template 去 implements interface
例子1: spring LDAP: http://goo.gl/P4Ycq6
例子2: DBUnit: http://goo.gl/IeP9Md
作者: cha122977 (CHA)   2015-04-12 02:08:00
常看到定個interface 然後要有預設行為就用abstractclass去implement這個interface 要用再繼承這個class
作者: qrtt1 (有些事,有時候。。。)   2015-04-12 11:16:00
java8 有 default method 也可以參考參考 :)

Links booklink

Contact Us: admin [ a t ] ucptt.com