1. 程式人生 > 其它 >7.Java面對物件

7.Java面對物件

Java面對物件

面向過程

  • 面向過程思想

    • 步驟清晰簡單,第一步做什麼,第二步做什麼...

    • 面對過程適合處理一些較為簡單的問題

  • 面向物件思想

  • 物以類聚,分類的思維模式。
    思考問題首先會解決問題需要哪些分類,
    然後對這些分類進行單獨思考,
    最後才對某個分類下的細節進行面向過程的思索。

  • 面向物件適合處理複雜的問題,適合處理需要多人協作的問題!

  • 對於描述複雜的事物,為了從巨集觀上把握、從整體上合理分析,
    我們需要使用面向物件的思路來分析整個系統。
    但是,具體到微觀操作,仍然需要面向過程的思路去處理。

面向物件

  • 面向物件程式設計,即OOP(Object-Oriented Programming)
  • 面向物件程式設計的本質就是:以類的方式組織程式碼,以物件的封裝資料。
  • 抽象:程式設計思想!持續的學習!實踐出真知!
  • 三大特性:
    • 封裝
    • 繼承
    • 多型
  • 從認識論角度考慮是先有物件後有類。
  • 物件,是具體的事物。類,是抽象的,是對物件的抽象
  • 從程式碼執行角度考慮是先有類後有物件。類是物件的模板。

回顧方法

  • 方法的定義
    • 修飾符
    • 返回型別
    • break:跳出switch,結束迴圈
    • return:結束方法
    • 方法名:注意規範就OK,見名知意
    • 引數列表:(引數型別,引數名) ...
    • 異常丟擲:疑問,後面講解
  • 方法的呼叫:遞迴
    • 靜態方法
    • 非靜態方法
    • 形參和實參
    • 值傳遞和引用傳遞
    • this關鍵字

封裝

  • 該露的露,該藏的藏
    • 我們程式設計要追求“高內聚,低耦合”
    • 高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;
    • 低耦合:僅暴露少量的方法給外部使用。
  • 封裝(資料的隱藏)
    • 通常,應禁止直接訪問一個物件中資料的實際表示,
      而應通過操作介面來訪問,這稱為資訊隱藏。
  • 記住這句話就夠了:屬性私有,get/set

繼承

  • 繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模。

  • extends的意思是“擴充套件”。子類是父類的擴充套件。

  • JAVA中類只有單繼承,沒有多繼承!

  • 繼承是類和類之間的一種關係。除此之外,類和類之間的關係還有依賴、組合、聚合等。

  • 繼承關係的倆個類,一個為子類(派生類),一個為父類(基類)。

  • 子類繼承父類,使用關鍵字extends來表示。

  • 子類和父類之間,從意義上講應該具有"is a"的關係.

  • object類

  • super - this

    1. super呼叫父類的構造方法,必須在構造方法的第一個

    2. super 必須只能出現在子類的方法或者構造方法中!

    3. super和 this不能同時呼叫構造方法!

    4. 代表的物件不同:

      • this:本身呼叫者這個物件
      • super:代表父類物件的應用
    5. 前提:

      • this:沒有繼承也可以使用
    • super:只能在繼承條件才可以使用
    1. 構造方法:
      • this():本類的構造
      • super():父類的構造
  • 方法重寫

    1. 重寫需要有繼承關係,子類重寫父類的方法!
    2. 引數列表,列表必須相同
    3. 修飾符:範圍可以擴大,但不能縮小:
      • public > Protected > Default > private
    4. 丟擲的異常:範圍:可以被縮小,但不能擴大:
      • Exception(大) --> ClassNotFoundException(小)
    5. 子類的方法和父類必須要一致:方法體不同!
    6. 為什麼需要重寫?
      • 父類的功能,子類不一定需要,或者不一定滿足!
      • Alt + Insert :override;
    7. 無法重寫的型別
      • 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表示式