5. Java 面向物件
阿新 • • 發佈:2020-08-07
Java 面向物件
1. 什麼是面向物件
- Java 的核心思想就是:OOP
1.1 面向過程 與 面向物件
-
面向過程
步驟清晰簡單,按步驟執行
-
面向物件
物以類聚,分類的思維模式。面對問題先分類,再單一思考,對最後的細節進行面向過程的思索
適合處理複雜的事物
-
巨集觀上,通過面向物件的思路分析;微觀上,通過面向過程的思路出路
面向過程和麵向物件的區別
- 面向過程:效能優於面向物件。
- 面向物件:易維護、易擴充套件、易複用
面向過程效能比面向物件高?
- 由於Java是半編譯語言,最終的執行程式碼不是CPU可執行的二進位制機器碼。
- 而面向過程的語言大多數是直接編譯成機器碼來執行,但是有一些指令碼語言效能也不一定比Java好。
1.2 什麼是面向物件
- 面向物件程式設計:OOP (Object-Oriented Programming)
- 面向物件的本質:以類的方式組織程式碼,以物件的形式封裝資料。
- 抽象
- 三大特性
- 封裝
- 繼承
- 多型
- 從認識的角度先有物件 後有 類。類是抽象的,是對物件的抽象
- 從程式碼的角度是先有類再有物件
1.3 方法
- 靜態方法與類一起載入的,非靜態方法物件例項化之後才載入。因此靜態方法可直接通過類呼叫。
2. 建立物件
- 使用 new 關鍵字建立物件
- 建立物件時除了分配記憶體空間外,還會給 建立好的物件 進行預設的初始化以及對類中的構造器的呼叫
- 類中的構造器也稱為構造方法,是建立物件時 必須要呼叫的。
- 構造方法的特點
- 必須與類的名字相同
- 必須沒有返回值型別,也不能寫 void
- 建構函式分為:無參構造和有參構造
- 建構函式的作用
- new 本質再呼叫建構函式
- 初始化物件的值
2.1 小結
-
類與物件
類是抽象的,物件是例項化的物件
類的屬性
- 靜態的屬性:
- 動態的行為:方法
-
物件的引用:物件是通過引用來操作的:棧--->堆
-
物件的建立和使用
- 必須使用 new 關鍵字,構造器
- 物件的屬性
3. 三大特性
- 程式設計追求 高內聚,低耦合
- 高內聚:類的內部資料操作細節自己完成,不允許外部干涉
- 低耦合:僅暴露少量的方法給外部使用
3.1 封裝
-
(資料的隱藏)通常,應禁止直接訪問一個物件中資料的實際表示,而應通過介面來訪問
-
屬性私有:get / set
-
封裝的作用
- 提高了程式碼的安全性
- 隱藏了程式碼的實現細節
- 統一介面
- 可維護性提高了
3.2 繼承
- 繼承的本質是某一批類的抽象,從而實現更好的建模
- extends ; 子類是父類的擴充套件
- Java 只可以單繼承
- 所有的類都直接或者間接繼承 Object
關鍵點:
-
super 注意點
- super 呼叫父類的構造方法,必須在構造方法的第一個
- super 必須只能出現在子類的方法或者構造方法中
- super 和 this 不能同時呼叫構造方法
-
this
- 代表的物件不同
- this 本身呼叫者這個物件
- super 代表父類物件的應用
- 前提
- this 沒有繼承也可使用
- super 只能在繼承條件才可使用
- 構造方法
- this 本類的構造方法
- super 父類的構造方法
- 代表的物件不同
3.3 多型
- 父類的引用指向子類的例項
Person person = new Student();
- 即同一個方法可以根據傳送物件的不同而採用多種不同的行為方式
- 一個物件的型別是確定的,但是可以指向對應的引用型別有很多
- 多型是 方法 的多型,屬性沒有多型
- 父類與子類 有聯絡
- 多型存在的條件
- 存在繼承關係
- 方法必須重寫
- 父類的引用指向子類物件
- new 左邊是引用型別,右邊是實際型別。而物件能使用的方法看引用型別
instanceof
- 判斷兩個類之間是否存在父子關係
static
- 類載入時就被載入,且只加載一次
4. 修飾符
- public:公有的
- protected:受保護的
- private:私有的
- static:靜態
- final:修飾常量
- abstract:抽象
在一個靜態方法中,呼叫一個非靜態成員為什麼是非法的?
- 因為靜態方法隨著類載入就已經初始化完成了,而非靜態成員需在物件例項化之後才完成初始化,所以沒法調。
靜態方法 和 例項方法的不同
- 靜態方法 可以以 類名.方法名 呼叫,而例項方法不可以,必須例項化之後
- 靜態方法隨著類載入就已經初始化完成了
4.1 常用關鍵字:
- static
- final
- this
- super
5. 抽象類
- Java 的類是單繼承的,介面是可以多繼承的
- 抽象類不能new, 只能靠子類去實現。約束
- 抽象類可以寫普通方法,抽象方法必須存在抽象類中
6. 介面
- 定義:interface
- 介面都需要有實現類
- 介面的作用:
- 約束
- 定義一些方法讓不同的人實現
- 方法都是 public abstract
- 常量都是 public static final
- 介面不能被例項化,因為介面中沒有構造方法
介面和抽象類的區別
- 介面的方法預設是public, 抽象類中可以有public, protected, default 這些。(不能有private , 抽象類的方法就是為了要被重寫)
- 介面中的方法不能有實現(jdk8 可以有預設實現),抽象類可以有非抽象的方法
- 一個類可以有多個介面,但只能實現一個抽象類。
7. 內部類
- 區域性內部類
- 靜態內部類:方法外面,類裡面
- 13匿名內部類:方法裡面