封装,抽象,继承,多态
面向對象編程是一種編程范式或編程風格。它以類或對象作為組織代碼的基本單元,并將封裝、抽象、繼承、多態四個特性,作為代碼設計和實現的基石 。
?
?封裝(Encapsulation)
? ?封裝也叫作信息隱藏或者數據訪問保護。類通過暴露有限的訪問接口,授權外部僅能通過類提供的方式(或者叫函數)來訪問內部信息或者數據。對于封裝這個特性,我們需要編程語言本身提供一定的語法機制來支持。這個語法機制就是訪問權限控制。例子中的 private、public 等關鍵字就是 Java 語言中的訪問權限控制語法。
??
?
抽象(abstraction)
? ?實際上,抽象這個特性是非常容易實現的,并不需要非得依靠接口類(interface)或者抽象類(abstract)這些特殊語法機制來支持。并不是說一個類實現一個接口,或者繼承一個類就叫做抽象。單純的一個類本身就滿足抽象特性。之所以這么說,那是因為,類的方法是通過編程語言中的“函數”這一語法機制來實現的。通過函數包裹具體的實現邏輯,這本身就是一種抽象。調用者在使用函數的時候,并不需要去研究函數內部的實現邏輯,只需要通過函數的命名、注釋或者文檔,了解其提供了什么功能,就可以直接使用了。比如,我們在使用 C 語言的 malloc() 函數的時候,并不需要了解它的底層代碼是怎么實現的。
?
?繼承(Inheritance)
? ?繼承是用來表示類之間的 is-a 關系,比如貓是一種哺乳動物。?為了實現繼承這個特性,編程語言需要提供特殊的語法機制來支持,比如 Java 使用 extends 關鍵字來實現繼承,C++ 使用冒號(class B : public A)。??繼承最大的一個好處就是代碼復用。假如兩個類有一些相同的屬性和方法,我們就可以將這些相同的部分,抽取到父類中,讓兩個子類繼承父類。這樣,兩個子類就可以重用父類中的代碼,避免代碼重復寫多遍。不過,這一點也并不是繼承所獨有的,我們也可以通過其他方式來解決這個代碼復用的問題,比如利用組合關系而不是繼承關系。
?
多態(Polymorphism)
??多態是指,子類可以替換父類,在實際的代碼運行過程中,調用子類的方法實現。多態這種特性也需要編程語言提供特殊的語法機制來實現。
??第一個語法機制是編程語言要支持父類對象可以引用子類對象。? ?
? 第二個語法機制是編程語言要支持繼承。
? 第三個語法機制是編程語言要支持子類可以重寫(override)父類中的方法。
? 對于多態特性的實現方式,除了利用“繼承加方法重寫”這種實現方式之外,我們還有其他兩種比較常見的的實現方式,一個是利用接口類語法,另一個是利用 duck-typing 語法。? 多態特性能提高代碼的可擴展性和復用性。除此之外,多態也是很多設計模式、設計原則、編程技巧的代碼實現基礎,比如策略模式、基于接口而非實現編程、依賴倒置原則、里式替換原則、利用多態去掉冗長的 if-else 語句等等。
?
?
??
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的封装,抽象,继承,多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode:44. 通配符匹配
- 下一篇: 面向对象,面向过程编程