多態:容許將子類類型的指針賦值給父類類型的指針。也就是同一操做做用於不一樣的對象,能夠有不一樣的解釋,產生不一樣的執行結果。在運行時,能夠經過指向基類的指針,來調用實現派生類中的方法。工具
象類和接口的區別在於使用動機。使用抽象類是爲了代碼的複用,而使用接口的動機是爲了實現多態性。因此,若是你在爲某個地方該使用接口仍是抽象類而猶豫不決時,那麼能夠想一想你的動機是什麼。設計
總而言之,接口與抽象類的區別主要在於使用的動機,而不在於其自己。而一個東西該定義成抽象類仍是接口,要根據具體環境的上下文決定。再者,我認爲接口和抽象類的另外一個區別在於,抽象類和它的子類之間應該是通常和特殊的關係,而接口僅僅是它的子類應該實現的一組規則。(固然,有時也可能存在通常與特殊的關係,但咱們使用接口的目的不在這裏)如,交通工具定義成抽象類,汽車、飛機、輪船定義成子類,是能夠接受的,由於汽車、飛機、輪船都是一種特殊的交通工具。再譬如Icomparable接口,它只是說,實現這個接口的類必需要能夠進行比較,這是一條規則。若是Car這個類實現了Icomparable,只是說,咱們的Car中有一個方法能夠對兩個Car的實例進行比較,多是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但咱們不能說「汽車是一種特殊的能夠比較」,這在文法上都不通。指針
里氏替換原則(Liskov Substitution Principle):派生類(子類)對象可以替換其基類(超類)對象被使用。通俗一點的理解就是「子類是父類」,舉個例子,「男人是人,人不必定是男人」,當須要一個父類類型的對象的時候能夠給一個子類類型的對象;當須要一個子類類型對象的時候給一個父類類型對象是不能夠的!對象
開放封閉原則(Open Closed Principle):封裝變化、下降耦合,軟件實體應該是可擴展,而不可修改的。也就是說,對擴展是開放的,而對修改是封閉的。所以,開放封閉原則主要體如今兩個方面:對擴展開放,意味着有新的需求或變化時,能夠對現有代碼進行擴展,以適應新的狀況。對修改封閉,意味着類一旦設計完成,就能夠獨立完成其工做,而不要對類進行任何修改。接口