對象引論

專欄目的:

傳統的學習方式都是羅列知識點,達到全面學習的目的。可是這樣的缺陷就是不能很深入理解這些知識。因此咱們得學習的觀念應該不只僅是全面性,還有就是明天它是從那裏來,解決了什麼問題,而且學習處理這些問題的新的思惟方式。整體來講就是全面,根源,場景,新思惟。java

章節解讀思路:

首先學習必定要系統,因此我先作了一個思惟導圖去總體把握。而後是具體分析每一個點,分析他們之間的聯繫。主要是要知道這個知識點在解決什麼問題,它的思路是怎麼樣的,看待問題的方式是怎麼樣的。對於一些很容易的知識點就沒有詳細探討了。程序員

整個章節的知識點的整理(全面):

圖片描述

具體章節思考(根源,場景,新思惟):

脈絡

整個章節的脈絡其實很清晰,就是首先談論的就是面向對象的思惟,而後就是java怎麼去實現的。編程

面向對象

咱們思考一個問題?計算機在幫助咱們人類解決問題。可是計算機解決問題的方式須要計算機能讀懂的方式。這樣就有了機器模型和具體問題模型之間轉換的問題。那麼咱們學習的這麼的語言就在充當這種將具體問題模型轉換爲機器模型的橋樑。基於對比咱們很清楚,像c語言是面向過程的語言,這種語言更加的偏向機器,更加討好計算機,這樣的缺陷就是開發者轉換模型比較麻煩。可是面嚮對象語言就將這種缺陷解決了。咱們將程序看成不少的對象的集合,整個程序的運做都是在發送消息而後進行操做。這樣程序就像咱們不少人類在協同合做,有了屬性和行爲。這樣咱們去開發的時候就很像本身在操做同樣,思考上去更加方便。整體來講語言就是在轉換機器模型和具體問題模型的橋樑,面嚮對象語言更加偏向咱們人類的思考方式的橋樑。數組

面向接口

咱們雖然將一切東西都看成是對象,可是去解決具體問題更多的在於去對象去執行某一個操做。因此咱們去寫程序的角度不只僅是咱們須要怎麼去抽象一切事物爲一個class,同時咱們須要知道咱們須要這個對象去作什麼。能夠說抽象事物是面向對象編程的基礎,而面向接口就是將一切對象運做起來去解決問題。這裏面新穎的思惟就是面向接口編程。安全

隱藏具體實現

咱們將一切抽象爲對象以後,那麼其中一些是能夠共用的,因此就有了類庫。在這裏咱們能夠將程序員分爲兩種,一個是類建立者,一個就是類使用者。一個類裏面確定有些信息是很重要的,修改一些內容將對該類的改變很大。可是對於類使用者來講其實並不重要。那麼這個時候咱們只將類使用者須要的東西暴露給他,而將很敏感的關鍵處給隱藏,這樣的設計將會更加安全,更加的健壯。因此隱藏具體實現其實更多的是爲了解決安全性的問題,固然也有權限的問題。學習

複用代碼

我以前談到共用的問題,其實這裏面也有複用。那麼咱們說到複用其實咱們很容易想到,繼承。可是複用代碼是否是隻有繼承呢?不是,其實還有一種咱們常常會用,叫作組合。簡單的將就是在同一個類裏面將另一個類看成一個屬性。我以爲這種考慮,打開了對於複用代碼的這種理解,值得記錄。spa

向上轉型

咱們在寫程序的時候會盡可能想寫一些沒有繼承的類,由於這樣比較乾淨,不會受父類的影響。咱們更想要看成基類,這樣更少依賴特定類型。接口就實現了這個功能。好比三角形和圓形都有計算面積的行爲。咱們能夠寫一個幾何圖形的接口,而後三角形和圓形去實現就行了。可是咱們執行程序的時候就不知道執行的是三角形仍是圓形,那麼java在這裏就作了處理。這樣的好處就是對於咱們以前寫好的代碼若是須要修改實現方式,不會影響該接口的使用。這也是向上轉型的魅力所在。設計

向下轉型和範型

有了向上轉型,確定就有向下轉型。那麼什麼是向下轉型呢。就是咱們將一個對象A存儲到一個普通數組,這個時候存儲進取的是object,而不是A。而後咱們須要將A取出來,這個時候取的是object的引用,可是A裏面的方法就被隱藏了。因此咱們須要將取出來的object強制轉換爲A。那麼對於我到處了A和B,那麼咱們怎麼知道取出來的是A或者B呢。因此這個時候就須要範型去限定存儲的對象是怎麼類型,當咱們向下轉型的時候就不會出錯了。對象