Re: [問題] 想請問interface的具體意義
※ 引述《jaw109 (潑文章都是為了養小雞)》之銘言:
: [前言]
: 我可以理解interface存在的立場
: 但我更想知道interface更具體的使用....
: (或者,用C++的觀念去理解...... if it is possible)
: [範例]
: 假設有個抽象類別,叫做交通工具
: 其下分別衍生出汽車與機車
: 然而,交通工具又引用著一個叫做電動雨刷的介面
: 我們都可以理解,所有的汽車都應該支援電動雨刷
: 而且所有的機車都應該不支援電動雨刷
: [問題]
: 1. 正如JAVA所規範的,interface是一個"has-a"的關係;如果我使用
: 機車的電動雨刷的話,會出現error嗎? 又或者只是 do nothing而已?
拍寫~ 我只會寫code以及註解~ (interface在code尾巴)
public class AutoMobile {
private boolean windshield = true; // 實例變數,汽車雨刷預設為「有」
public static void main(String[] args){
new AutoMobile().rainingAction(); // 產生實例並呼叫雨天動作
}
public void rainingAction(){ // 這是汽車雨天的動作
Chinesisch ch = setAction(windshield); // 以有雨刷與否得出雨刷動作
System.out.println(ch.getAction()); // 執行雨刷動作
// 接下來就是其他動作...
}
private Chinesisch setAction(boolean windshield){
Chinesisch ch = new Chinesisch(){ // 以下這裡實作介面方法
private String act = null;
public void setAction(boolean windshield){
if(windshield){
act = "twice left then once right";
}else{
act = "do nothing";
}
}
public String getAction(){
return act;
}
};
ch.setAction(windshield); // 實際運算方才實作的方法
return ch;
}
}
interface Chinesisch{ // 這是電動雨刷的interface
public void setAction(boolean windshield); // 這是介面方法
public String getAction(); // 由有沒有擋風玻璃計算動作
}
如果你將汽車類別換為機車,雨刷改為false,你再試看看,其實並沒你想像那麼難~
就算是has-a,當has not的時候,設計者還是可以自行撤銷父類別方法或實作介面因應。
--
No Dying Skills, ● - Dame! New tech...
but Lazy Users. .\)
http://www.wretch.cc/blog/hougzou ___________ ﹒ ︵ √\ ___________________
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.122.31
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 25 之 29 篇):