1.final關鍵字
(1)最終的意思, 可以修飾類,方法,變量
(2)特點:
A:它修飾的類,不能被繼承
B:它修飾的方法,不能被重寫(覆蓋)
C:它修飾的變量,這個變量其實是一個常量
【擴展】
①字面量常量:“hello”,10 , true
②自定義常量:final int x = 10;
(3)final面試相關:
A:final修飾局部變量的問題
①基本類型:基本類型的值不能發生改變
②引用類型:引用類型的地址值不能改變,但是,該對象的堆內存的值是可以改變的
B:初始化時間:
①只能賦值一次
②常見的賦值
2.多態
(1)同一個對象在不同的時刻 體現出來得到不同狀態
(2)多態的前提:
A:有繼承 或者 實現關系
B:有方法重寫
C:有父類 或者 父接口引用指向子類對象
(3)多態的分類
A:具體類多態
B:抽象類多態
C:接口多態
(4)多態中的成員訪問特點
A:成員變量
【編譯看左邊,運行看左邊】
B:構造方法
【子類的構造都會默認訪問父類構造】
創建子類對象的時候,會先訪問父類的構造方法,對父類的數據進行初始化
C:成員方法
【編譯看左邊,運行看右邊】
D:靜態方法
【編譯看左邊,運行看左邊】
E:為什么?
【因為成員方法有重寫,靜態方法與類相關】
(5)多態的好處
A:提高代碼的維護性(繼承體現)
B:提高代碼的擴展性(多態體現)
(6)多態的弊端:
父類不能使用子類的特有功能
表現:子可以當作父使用,父不能當作子使用
(7)多態中的轉型
A:向上轉型(從子到父)
【Person p = new Student()】
B:向下轉型(從父到子)
【Student s = (Student)p】
3.抽象類
(1)舉個例子來理解抽象類
貓和狗都是動物,根據繼承我們提取一個父類Animal,貓和狗都會叫,也就是它們的共性,
就可以在Animal類中定義,一個叫的方法。但是問題來了,
貓是喵喵叫,狗是汪汪叫,在父類的方法體,該如何寫。
我們可以在Animal中只定義了一個叫的方法,但沒有方法體,讓子類來實現具體的方法。
這里這個沒有方法體的方法就叫做抽象方法,這個類就叫做抽象類
(2)抽象類的特點
A:抽象類和抽象方法必須用關鍵字 abstract修飾
B:抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類
C:抽象類不能實例化,要靠子類來實現
D:抽象類的子類
①是一個抽象類
②是一個具體類,這個類必須重寫抽象類的所有抽象方法
(3)抽象類的成員特點:
A:成員變量
【有變量,有常量】
B:構造方法
【有構造方法】
C:成員方法
【有抽象,有非抽象】
D:舉例
(4)抽象類的幾個小問題
A:抽象類與構造方法,不能實例化,那么構造方法有什么用?
用于子類訪問父類數據的初始化
B:一個類如果沒有抽象方法,卻定義為抽象類,有什么用
為了不讓創建對象
C:abstract不能和哪些關鍵字共存
①final 沖突
②PRivate 沖突
③static 無意義
4.接口
(1)通過例子來理解接口
飛機和小鳥都會飛,但他們屬于不同的東西,所以不能用抽象類,
但他們又都有 飛 這個功能,這個時候就可以考慮用接口了
(2)接口的特點:
A:接口用關鍵字interface修飾
B:類實現接口用implements修飾
C:接口不能實例化
D:接口的實現類
①是一個抽象類
②是一個具體類
(3)接口得到成員特點
A:成員變量
【只能是常量,默認修飾符:public static final】
B:構造方法
【沒有構造方法】
問:如果沒有父類,那實現接口的子類,怎么初始化父類的成員
答:
C:成員方法
【只能是抽象的,默認修飾符public abstract】
(4)類與類,類與接口,接口與接口
A:類與類:繼承關系 ,只能單繼承,可以多層繼承
B:類與接口:實現關系,可以當實現,也可以多實現。并且還可以在繼承一個類的同事實現多個接口
C:接口與接口:繼承關系,可以單繼承,也可以多繼承
(5)什么時候用抽象類,什么時候用接口
A:抽象類 被繼承體現的是:xx is a XX 的關系。抽象類中定義的是該繼承體系的共性功能。
B:接口 被是實現體現的時候:xx like a XX 的關系。接口中定義的是該繼承體系的擴展功能。
新聞熱點
疑難解答