天天看點

面向對象

面向對象這一章是最重要的一章. java是一門純面向對象程式設計語言, 我們後面寫的所有程式都是在面向對象的基礎上編寫的. 但是, 很多童鞋在學完這一章會發現, 沒學到什麼. 确實是這樣. 面向對象難在思想和文法上. 真正應用的時候會不知不覺的滲透在你的代碼裡. 好多程式員寫程式會寫, 但是為什麼這樣寫? 不知道. 是以本章很多都是了解和需要思考的東西.

在本章你要學的重點知識點:

類與對象

構造方法

通路權限

繼承

多态 ( 最重要 )

抽象和接口

記憶體分析

其他知識點不是說不重要. 相對而言. 最重要的是上面這幾個.

講面向對象之前, 還要再提兩個概念, 沒有對比就沒有傷害~~:

面向過程:

從名字上可以看出來, 程式設計的思路是按照事務的發展流程而編寫的. 最典型的例子就是宋丹丹的那個特别niubility的問題: 要把大象裝冰箱總共分幾步? 第一步, 把冰箱門打開, 第二步, 把大象裝進去, 第三步.把冰箱門帶上. 此時, 宋丹丹給的答案就是典型的面向過程的思維方式.

優點: 想起來簡單, 寫起來也簡單

缺點: 維護困難. 代碼量越大, 越難維護.

面向對象:

一切以對象為中心. 我們扮演的是上帝的角色. 比如, 同樣是大象進冰箱, 用面向對象的思維來解決的話就是, 建立一個大象, 然後告訴大象, 進冰箱裡面去. 具體怎麼進冰箱由大象來完成. 面向對象的思維可以把”我”的工作減少到最低. 由對象來完成具體的操作.

優點: 超強的可擴充性. 可維護性.

缺點: 上手比較難, 尤其是剛開始就接觸面向對象.

既然要學習面向對象. 那我們就需要知道在代碼的世界裡如何建立對象. 就好比, 在生活中, 你需要一輛車. 那如何建立一輛車. 假設, 不存在任何技術壁壘. 就讓你造一輛車. 你該怎麼辦呢?

造車的過程:

畫圖紙, 畫圖紙分成兩部分:

把車的概念先定義下來, 比如, 車長什麼樣? 車的顔色? 車的最高速度? 檔位有幾個? 等等.

把車能做的事情規劃好, 比如, 車能跑, 車能跳高, 車能飛等等.

不要在意為什麼車能跳高. 面向對象的世界. 你是主宰. 你是上帝. 你想幹嘛就幹嘛

拿着圖紙去工廠中的房間裡制造一輛車.

上述過程中畫圖紙的過程就是寫類. 拿着圖紙去造車就是建立對象. 是以, 類是什麼? 類是對具體事務的描述.對某一類事務的總結. 對事物的歸類. 對象是什麼? 對象就是車. 就是具體要執行操作的事務.

類是一個概念. 對象是這一類事務的一個具體.

類與對象的關系就是圖紙和車的關系.

好了說這麼多. 怎麼寫一個類, 在java中類要使用class來聲明. 我們之前已經寫過類了. 隻是之前并不清楚那是什麼.

 public class car {

 }

這就定義了一個類. 也就是畫了一張圖紙. 但是. 這張圖紙現在還是空白的. 我們對車要進行描述. 描述車需要有兩個标準去描述, 1. 車有什麼屬性, 2. 車能幹什麼.

屬性: 使用成員變量來描述屬性

動作: 使用成員方法來描述動作

成員變量是什麼? 很簡單, 之前不是學過變量麼. 我們之前的變量是寫在main方法裡的. 這裡的成員變量指的是直接寫在類裡的變量叫成員變量. 比如. 車有顔色, 車有品牌, 車有排量等等.

這句話就是傳說中的建立對象了.

注意, 這裡其實是一個指派操作, 那根據指派操作的特點. 肯定要先執行等号右邊的代碼, 然後指派給等号左邊. 我們挨個分析.

new car(); new表示建立, 建立. 後面跟的是類名+括号. 整個這句話你可以了解為 建立一個車類型的對象. 那這個車是根據car類建立的. 是以這個對象一定符合類的定義. 這個很好了解. 用你的圖紙造的車. 肯定符合你圖紙上設計的樣子.

car c 這是個啥? 對比一下你瞬間秒懂

string a …… 沒錯. 就是聲明了一個變量. c是car類型的. 隻不過在面向對象的世界裡變量是沒有市場的. 大家都叫它引用. 這也就是我們講的第二大資料類型, 引用資料類型. 說的就是咱們寫的類. 聲明出來的變量.

整體合起來就是: 建立一個車類的對象. 然後指派給變量c. 以後變量c就是使用的這輛車.

ok, 對象建立出來了. 接下來. 怎麼用啊. 這破玩意.

類裡沒有的屬性你不能亂用.

總結: 我們寫的類. 又可以看做是類型. 類其實就是對某一類事物的歸類和描述. 對象是通過類建立的. 類是抽象概念, 對象是具體.

紅色

奔馳

3.6t

破車會跑

神車~~ 會跳高

我的車會遊泳

this是啥? 我們看一個例子.

這是上節課的例子. 就是寫個車. 車能跑. 但是這裡注意. 在run方法裡我們使用了一次color變量. 此時我們發現可以正常使用.

我們可以發現, 此時使用的color是對象裡的color, 那如果我給run()傳遞一個參數也叫color呢?

運作完結果居然不是紅色. 為什麼呢? 因為, 方法查找變量的順序: 方法内部(局部) > 對象. 說白了就是就近原則, 那此時我即想用局部變量又想用對象中的變量. 怎麼進行區分呢? 此時就需要用到this關鍵字.

在java中, this表示目前類的對象

啥叫目前類的對象. 就是正在執行這個方法的對象.

c.run() => 在run中this就是c. 你不信? 來, try一try

ok. 那就算this是對象. 那怎麼能區分成員變量和局部變量呢? 簡單. 我們在外面是怎麼看車的顔色的? c.color? ok. 那就換成this.color就好了. so tm easy

this可以幫我們在類中擷取到對象的任何資訊.