1. 如果一個(gè)類B在語法上繼承(extend)了類A, 那么在語義上類B是一個(gè)類A.
2. 如果一個(gè)類B在語法上實(shí)現(xiàn)了(implement)接口I, 那么類B遵從接口I制定的協(xié)議.
使用abstract class的根本原因在于, 人們希望通過這樣的方式, 表現(xiàn)不同層次的抽象.
而interface的本質(zhì)是一套協(xié)議. 在程序設(shè)計(jì)的發(fā)展中, 人們又發(fā)現(xiàn)接口可以用來表示對(duì)行為的抽象, 不過, 這只是interface的一種用法不是其本質(zhì).
理論結(jié)合實(shí)際才是最好的學(xué)習(xí)方式, 不過在這里, 我只想舉一些我見到過關(guān)于接口使用的反面教材:
1. 在接口中包含數(shù)據(jù)成員. 這幾乎肯定是錯(cuò)的, 因?yàn)閰f(xié)議是規(guī)范是標(biāo)準(zhǔn), 不應(yīng)該跟具體實(shí)現(xiàn)有任何牽連, 也不應(yīng)該給具體實(shí)現(xiàn)造成任何負(fù)擔(dān).
2. C++中 delete 掉一個(gè)接口. 例如:
Class ClassImpl : public IInterface
{
…
}
Int main()
{
IInterface* pInterface = new ClassImpl();
…
delete pInterface;
}
// 不應(yīng)當(dāng)有析構(gòu)函數(shù), 因?yàn)閺恼Z義上說, 接口是不能delete的.
Public:
Virtual void DoSomething() = 0;
}
Class B : public A
{
…
}
Int main()
{
A* pA = new B();
…
Delete pA;
}
新聞熱點(diǎn)
疑難解答