Re: [問題] 想請問interface的具體意義
※ 引述《jaw109 (潑文章都是為了養小雞)》之銘言:
: [問題]
: 1. 正如JAVA所規範的,interface是一個"has-a"的關係;如果我使用
: 機車的電動雨刷的話,會出現error嗎? 又或者只是 do nothing而已?
no, 你想得太複雜了,Java interface 就只是一個 pure abstract class 而已
寫成 C++ 的話就是這樣:
class 電動雨刷{ // 其實我是 interface...
public:
virtaul void 刷刷刷() = 0;
};
class 汽車: public 交通工具, public 電動雨刷{
// 沒錯,就是多重繼承,只是電動雨刷沒有任何實作
public:
void 開車();
void 刷刷刷(){ /*一定要實作,否則不能產生汽車實體*/ }
};
class 機車: public 交通工具{
// 不繼承電動雨刷
void 開車();
};
所以 Java Interface 其實是功能變弱的多重繼承
上面寫成 Java 的話就是這樣:
interface 電動雨刷{
public void 刷刷刷(); // 不需要實作,寫了會 error
// 忘了要不要加 public..... XD 懶得查證了
}
class 汽車 extends 交通工具 implements 電動雨刷{
public void 開車(){ /*...*/ }
public void 刷刷刷(){ /*一定要實作,不實作 compile error*/ }
}
class 機車 extends 交通工具{ // 沒有實作電動雨刷
public void 開車(){ /*...*/ }
}
然後兩者都可以這樣做:
C++:
電動雨刷* abc = new 汽車; // 無參數時括號可省略
Java:
電動雨刷 abc = new 汽車(); // 括號一定要加
--
Nobody can take anything away from him.
Nor can anyone give anything to him.
What came from the sea,
has returned to the sea.
Chrono Cross
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18
討論串 (同標題文章)