1. 程式人生 > >java學習筆記(9)

java學習筆記(9)

1:final關鍵字(掌握)
(1)是最終的意思,可以修飾類,方法,變數。
(2)特點:
A:它修飾的類,不能被繼承。
B:它修飾的方法,不能被重寫。
C:它修飾的變數,是一個常量。
(3)面試相關:
A:區域性變數
a:基本型別 值不能發生改變
b:引用型別 地址值不能發生改變,但是物件的內容是可以改變的
B:初始化時機
a:只能初始化一次。
b:常見的給值
定義的時候。(推薦)
構造方法中。

2:多型(掌握)
(1)同一個物件在不同時刻體現出來的不同狀態。
(2)多型的前提:
A:有繼承或者實現關係。
B:有方法重寫。
C:有父類或者父介面引用指向子類物件。

多型的分類:
a:具體類多型
class Fu {}
class Zi extends Fu {}
Fu f = new Zi();
b:抽象類多型
abstract class Fu {}
class Zi extends Fu {}

Fu f = new Zi();
c:介面多型
interface Fu {}
class Zi implements Fu {}

Fu f = new Zi();
(3)多型中的成員訪問特點
A:成員變數
編譯看左邊,執行看左邊
B:構造方法
子類的構造都會預設訪問父類構造
C:成員方法
編譯看左邊,執行看右邊
D:靜態方法
編譯看左邊,執行看左邊
為什麼?
因為成員方法有重寫。
(4)多型的好處:
A:提高程式碼的維護性(繼承體現)
B:提高程式碼的擴充套件性(多型體現)
(5)多型的弊端:
父不能使用子的特有功能。

現象:
子可以當作父使用,父不能當作子使用。
(6)多型中的轉型
A:向上轉型
從子到父
B:向下轉型
從父到子
(7)孔子裝爹的案例幫助大家理解多型
(8)多型的練習
A:貓狗案例
B:老師和學生案例

3:抽象類(掌握)
(1)把多個共性的東西提取到一個類中,這是繼承的做法。
但是呢,這多個共性的東西,在有些時候,方法宣告一樣,但是方法體。
也就是說,方法宣告一樣,但是每個具體的物件在具體實現的時候內容不一樣。
所以,我們在定義這些共性的方法的時候,就不能給出具體的方法體。
而一個沒有具體的方法體的方法是抽象的方法。
在一個類中如果有抽象方法,該類必須定義為抽象類。
(2)抽象類的特點
A:抽象類和抽象方法必須用關鍵字abstract修飾
B:抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類
C:抽象類不能例項化
D:抽象類的子類
a:是一個抽象類。
b:是一個具體類。這個類必須重寫抽象類中的所有抽象方法。
(3)抽象類的成員特點:
A:成員變數
有變數,有常量
B:構造方法
有構造方法
C:成員方法
有抽象,有非抽象
(5)抽象類的幾個小問題
A:抽象類有構造方法,不能例項化,那麼構造方法有什麼用?
用於子類訪問父類資料的初始化
B:一個類如果沒有抽象方法,卻定義為了抽象類,有什麼用?
為了不讓建立物件
C:abstract不能和哪些關鍵字共存
a:final 衝突
b:private 衝突
c:static 無意義

4:介面(掌握)
(1)回顧貓狗案例,它們僅僅提供一些基本功能。
比如:貓鑽火圈,狗跳高等功能,不是動物本身就具備的,
是在後面的培養中訓練出來的,這種額外的功能,java提供了介面表示。
(2)介面的特點:
A:介面用關鍵字interface修飾
interface 介面名 {}
B:類實現介面用implements修飾
class 類名 implements 介面名 {}
C:介面不能例項化
D:介面的實現類
a:是一個抽象類。
b:是一個具體類,這個類必須重寫介面中的所有抽象方法。
(3)介面的成員特點:
A:成員變數
只能是常量
預設修飾符:public static final
B:構造方法
沒有構造方法
C:成員方法
只能是抽象的
預設修飾符:public abstract
(4)類與類,類與介面,介面與介面
A:類與類
繼承關係,只能單繼承,可以多層繼承
B:類與介面
實現關係,可以單實現,也可以多實現。
還可以在繼承一個類的同時,實現多個介面
C:介面與介面
繼承關係,可以單繼承,也可以多繼承
C:設計理念不同
抽象類:is a,抽象類中定義的是共性功能。
介面:like a,介面中定義的是擴充套件功能。