多型:允許將子類型別的指標賦值給父類型別的指標。也就是同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。在執行時,可以通過指向基類的指標,來呼叫實現派生類中的方法。
例如,在自然界中,人都能吃飯,即「如果你是人,則必須能吃飯」。那麼模擬到電腦程式中,就應該有乙個iperson(習慣上,介面名由「i」開頭)介面,並有乙個方法叫eat(),然後我們規定,每乙個表示「人」的類,必須實現iperson介面,這就模擬了自然界「如果你是人,則必須能吃飯」這條規則。
從這裡,我想各位也能看到些許物件導向思想的東西。物件導向思想的核心之一,就是模擬真實世界,把真實世界中的事物抽象成類,整個程式靠各個類的例項互相通訊、互相協作完成系統功能,這非常符合真實世界的執行狀況,也是物件導向思想的精髓。
象類和介面的區別在於使用動機。使用抽象類是為了**的復用,而使用介面的動機是為了實現多型性。所以,如果你在為某個地方該使用介面還是抽象類而猶豫不決時,那麼可以想想你的動機是什麼。
總而言之,介面與抽象類的區別主要在於使用的動機,而不在於其本身。而乙個東西該定義成抽象類還是介面,要根據具體環境的上下文決定。再者,我認為介面和抽象類的另乙個區別在於,抽象類和它的子類之間應該是一般和特殊的關係,而介面僅僅是它的子類應該實現的一組規則。(當然,有時也可能存在一般與特殊的關係,但我們使用介面的目的不在這裡)如,交通工具定義成抽象類,汽車、飛機、輪船定義成子類,是可以接受的,因為汽車、飛機、輪船都是一種特殊的交通工具。再譬如icomparable介面,它只是說,實現這個介面的類必須要可以進行比較,這是一條規則。如果car這個類實現了icomparable,只是說,我們的car中有乙個方法可以對兩個car的例項進行比較,可能是比哪輛車更貴,也可能比哪輛車更大,這都無所謂,但我們不能說「汽車是一種特殊的可以比較」,這在文法上都不通。
黎克特制替換原則(liskov substitution principle):派生類(子類)物件能夠替換其基類(超類)物件被使用。通俗一點的理解就是「子類是父類」,舉個例子,「男人是人,人不一定是男人」,當需要乙個父類型別的物件的時候可以給乙個子類型別的物件;當需要乙個子類型別物件的時候給乙個父類型別物件是不可以的!
開放封閉原則(open closed principle):封裝變化、降低耦合,軟體實體應該是可擴充套件,而不可修改的。也就是說,對擴充套件是開放的,而對修改是封閉的。因此,開放封閉原則主要體現在兩個方面:對擴充套件開放,意味著有新的需求或變化時,可以對現有**進行擴充套件,以適應新的情況。對修改封閉,意味著類一旦設計完成,就可以獨立完成其工作,而不要對類進行任何修改。
感悟系列 物件導向
物件導向是對業務抽象成類 物件及其之間的關係來建模的軟體開發方法,一種程式設計正規化。具體通過物件導向的三大特徵來體現物件導向的思想。1 繼承性 類與類之間的關係和復用性,對映具體業務中物件間的關係。2 封裝性 類的獨立性,易於模組的維護和隔離,降低類之間耦合關係。3 多型性 類方法的靈活性 抽象 ...
c 物件導向程式設計 物件導向
什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...
物件導向程式設計
物件導向程式設計 抽象 封裝 繼承 多型 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因。開放封閉原則 軟體實體應該可以擴充套件,但是不可修改。所有的設計模式都是對不同的可變性進行封裝,從而使系統在不同的角度上達到開發封閉原則。依賴倒轉原則 a 高層不應該依賴低層,兩個都應該依賴抽象。b ...