1. 程式人生 > >再次理解面向物件

再次理解面向物件

1.在java界流傳著這樣一句話,萬事萬物皆物件。但是往往還要避免頻繁的建立物件,因為浪費資源。需要恰到好處才可以。spring容器可以管理bean的建立和銷燬。

2.類的介紹

比如說,一個學生就是一個類,類是幹嘛的呢?類描述的是一類事物所具有的共性內容。比如人類,動物類,車類。類是一些相關屬性與行為的集合。學生有自己的年齡,性別,身高,學號等等,這些屬性作為學生類的成員變數。行為就是方法功能,學生具有學習、吃飯、打遊戲的功能。

3.類與物件的關係

類對事物的抽象的描述,物件是屬於類的例項,例項就是實實在在的例子。比如一個學生物件就是一個學生類的具體例項,張三、李四就是具體存在的例項,它有自己的屬性和行為。一個學生類可以有多個例項。

4.面向物件的三個基本特徵

封裝、繼承、多型

①封裝

何為封裝?封裝簡單的說就是一個儲存物件的容器,類是對屬性和方法的封裝。比如分頁bean,封裝了當前頁的屬性、每頁顯示最大記錄數、總記錄數等,還有struts中,模型驅動也是把前臺傳過來的值進行封裝在model中。springmvc是把前臺傳過來的值封裝在方法中的引數中,這也是封裝。

父類中private修飾的成員變數,子類中不能直接使用。通俗的解釋就是:你爸爸買了一部小車,你還不太會開,你爸爸把它宣告它為private,沒有你爸爸的允許你是不能使用的,因為車鑰匙在你爸爸手中。至於你非要開車,那也是有辦法的,那就是你可以偷出這把鑰匙,這就相當也你把private變成的public可以使用了,這就是反射機制了。

父類protected修飾的成員變數,只有子類可以使用。通俗點就是你爸爸的財產只能給你,不能給別人家的孩子。

②繼承

類只是用來描述單個事物的。但是類與類,也就是事物與事物之間也有關係,所以為了解決這個問題,出現了繼承。父類中有的方法和屬性(非私有的),子類可以繼承使用。

注意:只有兩個類有關係才可以繼承使用,不能隨便繼承。

繼承的好處:提高程式碼的複用性。

繼承的弊端:打破了封裝性。

java中不支援多繼承的原因:

當一個類繼承多個類的時候,如果出現兩個一樣的方法的話,會出現不確定性,jvm不知道呼叫哪一個方法。為了解決這個問題後面出現了介面,間接地彌補了這一點。

③多型

何為多型呢?多型就是一個物件在不同狀態的表現形式。通俗點說比如你在家裡是孩子,你在學校是學生,你在公司就是員工,這是在不同場合下的不同身份和不同的狀態。一個介面中定義一個吃飯的方法,不同的類來實現就有不同的狀態,張三吃飯,李四吃飯等。

子類以父類的身份出現,但做事情時還是以自己的方法實現。子類以父類的身份出現需要向上轉型(upcast),其中向上轉型是由JVM自動實現的, 是安全的,但向下轉型(downcast)是不安全的,需要強制轉換。子類以父類的身份出現時自己特有的屬性和方法將不能使用。

5. 面向物件的特點:
a.java就是描述生活中的現象的,只是用程式碼來描述,程式碼時死的,但是人是活的,要有自己的理解,java就是解決生活中的問題的。
b.將複雜事情簡化;
c.角色上的轉變,執行者--->指揮者;
 在專案框架中可以看到,web層乾的事情就是三件事(不管是ssh還是ssm框架),①接收引數②處理業務③相應檢視

當web層接收到引數需要service呼叫dao去資料庫中查詢資料返回給web層。這就是web指揮service去幹活,web層不管你service怎麼做,它只要自己的資料,你service想辦法實現。同樣service需要什麼結果,就指揮dao去資料庫查詢相應的資料返回給dao。

在例如rest風格的webservice遠端呼叫,客戶端這邊不管你遠端伺服器怎麼處理,我只要知道你的訪問地址,還有暴露的介面,你遠端服務端就要給我相應的結果就行。指揮它去幹活。好比經理分配任務後,它不管你怎麼做,我只要你在相應時間完成功能需要求,達到要求就行。經理指揮你去幹活。這何嘗又不是面向物件呢。因為要是什麼都自己去實現,那這樣就是面向過程變成了。所有的事情都是自己親力親為,精力不夠也不一定搞的好。別人已經定義好了一些功能,自己直接呼叫就行。