7.Java面對物件
Java面對物件
面向過程
-
面向過程思想
-
步驟清晰簡單,第一步做什麼,第二步做什麼...
-
面對過程適合處理一些較為簡單的問題
-
-
面向物件思想
-
物以類聚,分類的思維模式。
思考問題首先會解決問題需要哪些分類,
然後對這些分類進行單獨思考,
最後才對某個分類下的細節進行面向過程的思索。 -
面向物件適合處理複雜的問題,適合處理需要多人協作的問題!
-
對於描述複雜的事物,為了從巨集觀上把握、從整體上合理分析,
我們需要使用面向物件的思路來分析整個系統。
但是,具體到微觀操作,仍然需要面向過程的思路去處理。
面向物件
- 面向物件程式設計,即OOP(Object-Oriented Programming)
- 面向物件程式設計的本質就是:以類的方式組織程式碼,以物件的封裝資料。
- 抽象:程式設計思想!持續的學習!實踐出真知!
- 三大特性:
- 封裝
- 繼承
- 多型
- 從認識論角度考慮是先有物件後有類。
- 物件,是具體的事物。類,是抽象的,是對物件的抽象
- 從程式碼執行角度考慮是先有類後有物件。類是物件的模板。
回顧方法
- 方法的定義
- 修飾符
- 返回型別
- break:跳出switch,結束迴圈
- return:結束方法
- 方法名:注意規範就OK,見名知意
- 引數列表:(引數型別,引數名) ...
- 異常丟擲:疑問,後面講解
- 方法的呼叫:遞迴
- 靜態方法
- 非靜態方法
- 形參和實參
- 值傳遞和引用傳遞
- this關鍵字
封裝
- 該露的露,該藏的藏
- 我們程式設計要追求“高內聚,低耦合”。
- 高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;
- 低耦合:僅暴露少量的方法給外部使用。
- 封裝(資料的隱藏)
- 通常,應禁止直接訪問一個物件中資料的實際表示,
而應通過操作介面來訪問,這稱為資訊隱藏。
- 通常,應禁止直接訪問一個物件中資料的實際表示,
- 記住這句話就夠了:屬性私有,get/set
繼承
-
繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模。
-
extends的意思是“擴充套件”。子類是父類的擴充套件。
-
JAVA中類只有單繼承,沒有多繼承!
-
繼承是類和類之間的一種關係。除此之外,類和類之間的關係還有依賴、組合、聚合等。
-
繼承關係的倆個類,一個為子類(派生類),一個為父類(基類)。
-
子類繼承父類,使用關鍵字extends來表示。
-
子類和父類之間,從意義上講應該具有"is a"的關係.
-
object類
-
super - this
-
super呼叫父類的構造方法,必須在構造方法的第一個
-
super 必須只能出現在子類的方法或者構造方法中!
-
super和 this不能同時呼叫構造方法!
-
代表的物件不同:
- this:本身呼叫者這個物件
- super:代表父類物件的應用
-
前提:
- this:沒有繼承也可以使用
- super:只能在繼承條件才可以使用
- 構造方法:
- this():本類的構造
- super():父類的構造
-
-
方法重寫
- 重寫需要有繼承關係,子類重寫父類的方法!
- 引數列表,列表必須相同
- 修飾符:範圍可以擴大,但不能縮小:
- public > Protected > Default > private
- 丟擲的異常:範圍:可以被縮小,但不能擴大:
- Exception(大) --> ClassNotFoundException(小)
- 子類的方法和父類必須要一致:方法體不同!
- 為什麼需要重寫?
- 父類的功能,子類不一定需要,或者不一定滿足!
- Alt + Insert :override;
-
無法重寫的型別
- static 方法,屬於類,不屬於例項
- final 常量
- private 方法
多型
-
動態編譯:型別:可擴充套件性
-
即同一方法可以根據傳送物件的不同而採用多種不同的行為方式。
-
一個物件的實際型別是確定的,但可以指向物件的引用的型別有很多
-
多型存在的條件
- 有繼承關係
- 子類重寫父類方法
- 父類引用指向子類物件
-
多型注意事項:
1.多型是方法的多型,屬性沒有多型。
2.父類和子類,有聯絡,型別轉換異常!ClassCastException!
3.存在條件:繼承關係,方法需要重寫
4.父類引用指向子類物件! Father f1 = new Son();
-
instanceof (型別轉換)
- 引用型別 判斷一個物件是什麼型別~
抽象類
-
abstract修飾符可以用來修飾方法也可以修飾類,
如果修飾方法,那麼該方法就是抽象方法;
如果修飾類,那麼該類就是抽象類。 -
抽象類中可以沒有抽象方法,但是有抽象方法的類一定要宣告為抽象類。
-
抽象類,不能使用new關鍵字來建立物件,它是用來讓子類繼承的。
-
抽象方法,只有方法的宣告,沒有方法的實現,它是用來讓子類實現的。
-
子類繼承抽象類,那麼就必須要實現抽象類沒有實現的抽象方法,
否則該子類也要聲 明為抽象類。1.不能new這個抽象類,只能考子類去繼承它;約束!
2.抽象類中可以寫普通的方法~
3.抽象方法必須在抽象類中~
4.抽象類中可以寫普通方法~
5.抽象的抽象:約束~
6.思考題: new,存在構造器麼?
7.存在的意義 抽象出來~ 提高開發效率
介面
-
普通類:只有具體實現
-
宣告類的關鍵字是class,宣告介面的關鍵字是interface
-
抽象類:具體實現和規範(抽象方法)都有!
-
介面:只有規範!自己無法寫方法~專業的約束!
-
約束和實現分離!面向介面程式設計~
-
介面就是規範,定義的是一組規則,
體現了現實世界中“如果你是...則必須能.….”的思想。
如果你是天使,則必須能飛。如果你是汽車,則必須能跑。
如果你好人,則必須幹掉壞人;如果你是壞人,則必須欺負好人。 -
介面的本質是契約,就像我們人間的法律一樣。制定好後大家都遵守。
-
面向物件的精髓,是對物件的抽象,最能體現這一點的就是介面。
為什麼我們討論設計模式都只針對具備了抽象能力的語言(c++、Java、c#)
就是因為設計模式所研究的,實際上就是如何合理的去抽象。 -
作用:
1.約束
2.定義一些方法,讓不同的人實現~ (10 ---> 1)
3.public abstract
4.public static final
5.介面不嫩被例項化~,介面沒有構造方法
6.implements可以實現多個介面
7.必須要重寫介面中的方法~
8.總結部落格~
內部類(選修)
-
內部類就是在一個類的內部在定義一個類,比如,A類中定義一個B類,
那麼B類相對A類來說就稱為內部類,而A類相對B類來說就是外部類了。1.成員內部類
2.靜態內部類
3.區域性內部類
4.匿名內部類I
5.lambada表示式