2012-02-17 114 views
1

這是我在很多訪談中遇到的非常基本但深思熟慮的問題爲什麼我們真的想要抽象類和接口,即使我們可以通過簡單繼承來實現。 (技術上通過使功能和覆蓋它說)。什麼會留下沒有OOPS使用抽象和接口

由於創建抽象類和接口

+0

可能重複[接口和抽象類之間的區別是什麼?](http://stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract-類) – Sarfraz 2012-02-17 11:35:00

+0

@Sarfraz:我想要可以使用的實時場景。 – 2012-02-17 11:37:05

回答

3

抽象類允許您爲代碼的其餘部分奠定基礎。您可以創建一個部分實現的類,然後允許用戶創建更具體到他們的需求的具體實例。常用功能保留在抽象類中。 真實世界的比喻是汽車租賃店。他們僱用'汽車'。 「汽車」的概念是一個抽象的類,可以在他們的系統中有多種方法允許租用和返回,還有保險組,日常費率等屬性。然而,沒有客戶會去租用商店並租用一輛車'。他們會僱用福特福克斯,梅賽德斯,斯柯達法比亞等等。因此,這些是抽象類的具體實例,並且可能在具有從「car」派生的特定類的面向對象系統中表示。
另一方面,接口允許多態性。這是當一個類的對象變得像另一個類的行爲時。我是一個開車的人。我不是'駕駛員'的對象(因爲我做了很多其他的事情),但我可能會被視爲有一個'駕駛員'界面,可以訪問我的駕駛執照細節和類似的東西。

+0

:哇這是很好的解釋 – 2012-02-17 11:59:38

+0

:我可以得到更多的例子或任何網址閱讀這些概念 – 2012-02-17 12:01:57

+0

不是我的頭頂。我不得不一次教OOP,所以我編造了自己的遊戲。 – deadlyvices 2012-02-17 12:39:13

1

抽象類可以包含與不界面差異部分實現的一些功能包含任何實現,但僅包含純虛擬方法聲明。使用接口的基本原因是,如果除了與其交互的方式之外,您確實不瞭解該類的任何內容(這將爲您的代碼提供更多的抽象) - 接口比抽象類更抽象。另一方面,抽象類只是物理對象的部分表示。另外在C++中,接口可以從dll導出,不同之處在於抽象類或簡單類。

0

這是面向對象理論和實踐中的一個非常基礎的學科。爲什麼我們有抽象類,爲什麼我們有接口,兩者有什麼區別,等等。它有兩個方面,我稱之爲「機械的」和「基本的」方面。在解釋這些概念時,通常強調它們的機械方面(如語法差異,可以實例化或不實例化等)。雖然這些事情很重要,但更重要的是理解它們本質的不同。

我已經在我的網站上的一篇文章中解釋了我對這個主題的看法。

http://nazar-merza.com/

注:該網站是新的,仍在建設中,所以不會有太多的帖子還沒有,但很快我將張貼在面向對象的基本方面的一些文章。