標籤:
1:final關鍵字(掌握) (1)是最終的意思,可以修飾類,方法,變數。
(2)特點:
A:它修飾的類,不能被繼承。
B:它修飾的方法,不能被重寫。
C:它修飾的變數,是一個常量。
(3)面試相關: A:局部變數 a:基本類型 值不能發生改變 b:參考型別 地址值不能發生改變,但是對象的內容是可以改變的 B:初始化時機 a:只能初始化一次。 被final修飾的變數只能賦值一次。
在構造方法完畢前。(非靜態常量) 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:抽象類別(掌握)
抽象類別概述 回想前面我們的貓狗案例,提取出了一個動物類。並且我們在前面也建立過了動物對象,其實這是不對的。 為什麼呢?因為,我說動物,你知道我說的是什麼動物嗎?只有看到了具體的動物,你才知道,這是什麼動物。 所以說,動物本身並不是一個具體的事物,而是一個抽象的事物。只有真正的貓,狗才是具體的動物。同理,我們也可以推想,不同的動物吃的東西應該是不一樣的,所以,我們不應該在動物類中給出具體體現,而是應該給出一個聲明即可。在Java中,一個沒有方法體的方法應該定義為抽象方法,而類中如果有抽象方法,該類必須定義為抽象類別。
(1)把多個共性的東西提取到一個類中,這是繼承的做法。 但是呢,這多個共性的東西,在有些時候,方法聲明一樣,但是方法體。 也就是說,方法聲明一樣,但是每個具體的對象在具體實現的時候內容不一樣。 所以,我們在定義這些共性的方法的時候,就不能給出具體的方法體。 而一個沒有具體的方法體的方法是抽象的方法。 在一個類中如果有抽象方法,該類必須定義為抽象類別。
(2)抽象類別的特點 A:抽象類別和抽象方法必須用關鍵字abstract修飾 B:抽象類別中不一定有抽象方法,但是有抽象方法的類一定是抽象類別 C:抽象類別不能執行個體化 D:抽象類別的子類
a:是一個抽象類別。
b:是一個具體類。這個類必須重寫抽象類別中的所有抽象方法。
(3)抽象類別的成員特點: A:成員變數 有變數,有常量(既可以是變數,也可以是常量) B:構造方法 有構造方法(用於子類訪問父類資料的初始化) C:成員方法 有抽象,有非抽象(既可以是抽象的,也可以是非抽象的)
抽象類別的成員方法特性: A:抽象方法 強制要求子類做的事情。 B:非抽象方法 子類繼承的事情,提高代碼複用性。 (4)抽象類別的練習 A:貓狗案例練習 B:老師案例練習 C:學生案例練習 D:員工案例練習 (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 int num = 10; 而其實他的預設修飾符是: public static final num = 10;
預設修飾符:public static final
建議:自己手動給出預設修飾符 B:構造方法
沒有構造方法 C:成員方法
只能是抽象的
預設修飾符:public abstract (即使你定義的時候不寫public)
建議:自己手動給出預設修飾符
(4)類與類,類與介面,介面與介面 A:類與類 繼承關係,只能單繼承,可以多層繼承 B:類與介面 實現關係,可以單實現,也可以多實現。 還可以在繼承一個類的同時,實現多個介面 C:介面與介面 繼承關係,可以單繼承,也可以多繼承 (5)抽象類別和介面的區別(自己補齊)? A:成員區別 抽象類別: 介面: B:關係區別: 類與類: 類與介面: 介面與介面: C:設計理念不同 抽象類別:is a,抽象類別中定義的是共性功能。 介面:like a,介面中定義的是擴充功能。
Java基礎班學習筆記(9)