面向對象的三大特性:封裝性、繼承性、多态性
1.方法就是一種封裝
2.關鍵字private也是一種封裝
封裝就是将一些細節資訊隐藏起來,對于外界不可見
一旦使用了private進行修飾,那麼本類中可以随意通路,但是超出了本類的範圍就不能再通路了
可以通過間接通路的方式,自定義一對兒Getter/Setter方法,必須叫 setXxx 或者是 getXxx
對于Getter來說,不能有參數,傳回值類型和成員變量對應
對于Setter來說,不能有傳回值,參數類型和成員變量對應
布爾類型的特殊情況
當方法的局部變量和類的成員變量重名的時候,根據就近原則,優先使用局部變量,如果需要通路 本類當中的成員變量,需要使用格式:this.成員變量
通過誰調用的方法,誰就是this
構造方法是專門用來建立對象的方法,當我們使用關鍵字new來建立對象的時候,其實就是在調用構造方法
注意事項:
一個标準的類通常擁有下面的四個部分:
繼承是多态的前提,如果沒有繼承,就沒有多态
繼承解決的主要問題就是:共性抽取
定義類時的兩個注意事項:
成員變量時直接定義在類當中的,在方法外面
成員方法不要寫static關鍵字
直接通過子類對象通路成員變量
等号左邊是誰,就優先使用誰,沒有則向上找
間接通過成員方法通路成員變量
直接使用的方法中的變量
this.變量名:調用本類中的成員變量
super.變量名:調用父類中的成員變量
在父子類的繼承關系當中,建立子類對象,通路成員方法的規則:建立的對象是誰,就優先使用誰,如果沒有則向上找
注意:無論是成員方法還是成員變量,如果沒有都是向上找父類u,絕不會向下找子類
重寫:方法的名稱一樣,參數清單也一樣,覆寫、覆寫
重載:方法的名稱一樣,參數清單不一樣
方法的覆寫重寫特點:建立的是子類對象,則優先用子類方法
方法覆寫重寫的注意事項:
必須保證父子類之間的方法名稱相同、參數清單也相同
@Override:寫在方法前面,用來檢測是不是有效的正确覆寫重寫,這個注釋就算不寫,隻要滿足要求,也是正确的覆寫重寫
子類方法的傳回值必須小于等于父類方法的傳回值範圍。Object類是所有類的父類
子類方法的權限必須大于等于父類方法的權限修飾符。public > protected > (default) > private 注意:(default)不是關鍵字default,而是什麼都不寫,留白
繼承中方法的覆寫重寫應用場景
子類構造方法當中有一個預設隐含的 "super()" 調用,是以一定是先調用的父類構造,後執行的子類構造
子類構造可以通過super關鍵字來調用父類重載構造
super的父類構造調用,隻能是第一個語句 ,不能一個子類構造調用多次super構造
子類必須調用父類構造方法,不寫贈送super() 寫了則用寫的指定該的super調用,super隻能有一個,還必須是第一個
在子類的成員方法中,通路父類的成員變量
在子類的成員方法中,通路父類的成員方法
在子類的構造方法中,通路父類的構造方法
在本類的成員方法中,通路本類的成員變量
在本類的成員方法中通路本類的另一個成員方法
在本類的構造方法中,通路本類的另一個構造方法
注意:
在第三種用法中要注意:this(..)調用必須是構造方法的一個語句,唯一一個
super和this兩種構造調用,不能同時使用
Java語言繼承的三個特點:
一個類的 直接父類隻能有唯一一個
Java語言可以多繼承
一個子類的直接父類是唯一的,但是一個父類可以擁有很多個子類

extends繼承或者implements實作,是多态的前提。
小明這個對象既有學生形态,也有人類形态。一個對象擁有多種形态,這就是:對象的多态性
代碼當中展現多态性,其實就是一句話:父類引用指向子類對象
格式:
父類名稱 對象名 = new 子類名稱()
接口名稱 對象名 = new 實作類名稱()
通路成員變量的兩種方式:
直接通過對象名稱通路成員變量,看等号左邊是誰,優先用誰,沒有則向上找
間接通過成員方法通路成員變量,看該方法屬于誰,優先用誰,沒有則像上找
在多态的代碼當中,成員方法的優先通路規則是:看new的是誰,就優先用誰,沒有則向上找
注意:編譯看左邊,運作看右邊
對比一下
成員變量:編譯看左邊,運作還看左邊
成員方法:編譯看左邊,運作看右邊
對象的向上轉型,其實就是多态寫法
格式: 父類名稱 對象名 = new 子類名稱()
含義:右側建立一個子類對象,把它當作父類來看待使用
向上轉型一定是安全的,從小範圍轉到了大範圍
但是有一個弊端:對象一旦向上轉型為父類,那麼就無法調用子類原本的特有内容
類似于:double num = 100 正确 int----double 自動類型轉換
對象的向下轉型,其實是一個還原動作
格式:子類名稱 對象名 = (子類名稱) 父類對象
含義:将父類對象,還原成為原本的子類對象
必須保證對象本來建立的時候,就是貓,才能向下轉型成為貓
如果對象建立的時候本來不是貓,現在非要向下轉型成為貓,就會報錯
類似于:int num = (int) 10.0 正确 int num = (int) 10.5 錯誤,發生精度損失