前面我們簡單的了解了面向對象的三大特征,我也是簡單粗略的說了一些,最近在別人某些大咖的博客上看到更有深層的解釋,現在我在補充一下.
封 裝
1. 封裝定義:
封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的接口。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。封裝是一種信息隱藏技術,在java中通過關鍵字private實現封裝。什麼是封裝?封裝把對象的所有組成部分組合在一起,封裝定義程序如何引用對象的數據,封裝實際上使用方法將類的數據隱藏起來,控制用戶對類的修改和訪問數據的程度。
2.封裝的作用:
① 對象的數據封裝特性徹底消除了傳統結構方法中數據與操作分離所帶來的種種問題,提高了程序的可復用性和可維護性,降低了程序員保持數據與操作內容的負擔。 ②對象的數據封裝特性還可以把對象的私有數據和公共數據分離開,保護了私有數據,減少了可能的模塊間干擾,達到降低程序復雜性、提高可控性的目的。 封裝的對象一般包括屬性和方法,屬性可用來描述同一類事物的特征,方法可描述一類事物可做的操作,封裝就是把屬於同一類事物的共性(包括屬性與方法)歸到一個類中,以方便使用。 1.概念:一個類繼承另一個類,則稱繼承的類為子類,被繼承的類為父類。
2.目的:實現代碼的復用。
3.理解:子類與父類的關系並不是日常生活中的父子關系,子類與父類而是一種特殊化與一般化的關系,是is-a的關系,子類是父類更加詳細的分類。如class dog extends animal,就可以理解為dog is a animal.注意設計繼承的時候,若要讓某個類能繼承,父類需適當開放訪問權限,遵循裡氏代換原則,即向修改關閉對擴展開放,也就是開-閉原則。
4.結果:繼承後子類自動擁有了父類的屬性和方法,但特別注意的是,父類的私有屬性和構造方法並不能被繼承。
另外子類可以寫自己特有的屬性和方法,目的是實現功能的擴展,子類也可以復寫父類的方法即方法的重寫。
注意:JAVA不支持多繼承,單繼承使JAVA的繼承關系很簡單,一個類只能有一個父類,易於管理程序,同時一個類可以實現多個接口,從而克服單繼承的缺點。Java語言中的類只支持單繼承,而接口支持多繼承。Java中多繼承的功能是通過接口(interface)來間接實現的
5.java繼承的特征
(1)繼承關系是傳遞的。若類C繼承類B,類B繼承類A(多繼承),則類C既有從類B那裡繼承下來的屬性與方法,也有從類A那裡繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隱式的,但仍是類C的屬性和方法。繼承是在一些比較一般的類的基礎上構造、建立和擴充新類的最有效的手段。
(2)繼承簡化了人們對事物的認識和描述,能清晰體現相關類間的層次結構關系。
(3)繼承提供了軟件復用功能。若類B繼承類A,那麼建立類B時只需要再描述與基類(類A)不同的少量特征(數據成員和成員方法)即可。這種做法能減小代碼和數據的冗余度,大大增加程序的重用性。
(4)繼承通過增強一致性來減少模塊間的接口和界面,大大增加了程序的易維護性。
(5)提供多重繼承機制。從理論上說,一個類可以是多個一般類的特殊類,它可以從多個一般類中繼承屬性與方法,這便是多重繼承。Java出於安全性和可靠性的考慮,僅支持單重繼承,而通過使用接口機制來實現多重繼承。
多態--多態的概念發展出來,是以封裝和繼承為基礎的。
多態就是在抽象的層面上實施一個統一的行為,到個體(具體)的層面上時,這個統一的行為會因為個體(具體)的形態特征而實施自己的特征行為。(針對一個抽象的事,對於內部個體又能找到其自身的行為去執行。)
1.概念:相同的事物,調用其相同的方法,參數也相同時,但表現的行為卻不同。
2.理解:子類以父類的身份出現,但做事情時還是以自己的方法實現。子類以父類的身份出現需要向上轉型(upcast),其中向上轉型是由JVM自動實現的,是安全的,但向下轉型(downcast)是不安全的,需要強制轉換。子類以父類的身份出現時自己特有的屬性和方法將不能使用。
3.多態有兩種表現形式:重載和覆蓋
首先說重載(overload),是發生在同一類中。與什麼父類子類、繼承毫無關系。
標識一個函數除了函數名外,還有函數的參數(個數和類型)。也就是說,一個類中可以有兩個或更多的函數,叫同一個名字而他們的參數不同。
他們之間毫無關系,是不同的函數,只是可能他們的功能類似,所以才命名一樣,增加可讀性,僅此而已!
再說覆蓋(override),是發生在子類中!也就是說必須有繼承的情況下才有覆蓋發生。
我們知道繼承一個類,也就有了父類了全部方法,如果你感到哪個方法不爽,功能要變,那就把那個函數在子類中重新實現一遍。
這樣再調用這個方法的時候,就是執行子類中的過程了。父類中的函數就被覆蓋了。(當然,覆蓋的時候函數名和參數要和父類中完全一樣,不然你的方法對父類中的方法就不起任何作用,因為兩者是兩個函數,毫不關系)
批:如有雷同,屬於借鑒