類的派生、多態、抽象類、介面 1:派生-extends 派生就是繼承已有類非私有的欄位和方法等創建新的類,還可以添加、重寫欄位和方法; 在類的派生中,構造函數不可以被繼承; 派生源的類-父類/基類/超類;派生的類-子類/派生類; 2:super(…)調用超類的構造函數,在子類構造函數的開頭; sup ...
類的派生、多態、抽象類、介面
1:派生-extends
派生就是繼承已有類非私有的欄位和方法等創建新的類,還可以添加、重寫欄位和方法;
在類的派生中,構造函數不可以被繼承;
派生源的類-父類/基類/超類;派生的類-子類/派生類;
2:super(…)調用超類的構造函數,在子類構造函數的開頭;
super(…)和this(…)不能同時存在構造函數中,因為都必須在開始調用;
3:子類的構造函數中如果無顯示調用超類構造函數,則會自動調用超類中的“不接收參數的構造函數”;
X(……){super();}
4:在類中最好顯性編寫“不接收參數的構造函數”;
雖然類會預設一個不接收參數的構造函數,但一旦定義帶參數的構造函數,就不會預設,需要手工創建;
避免子類未定義構造函數出錯--第3點
5:超類和子類
6:超類和子類的實例引用
向上引用僅會執行子類繼承父類的 功能或重寫 部分,向上引用無法調用子類獨有的功能;
如下圖2部分
7:多態-派生類的價值
重寫(override)-重寫定義一個與超類中的方法簽名一樣的方法。讓超類方法無效。如果要調用使用supper.方法名顯示調用
引用類型轉型
向上轉型-超類類型的變數引用子類實例
向下轉型-顯示進行類型轉型,比較常用的是對Object向下轉型(類型)object;
8:註解-@Override(編譯器可以讀懂的註釋)
告知程式重寫超類的方法,而不是重寫添加新的方法,避免出錯
格式:@Override 方法名稱
9:繼承和訪問許可權
成員(欄位、方法、類、介面)可以被繼承,私有成員、實例初始化器、靜態初始化器、構造函數不會被繼承;
final類不能派生,final方法不能被重寫;
當重寫方法時,必須賦給與超類中方法相同或小於的訪問許可權修飾符
不可以將超類的類方法重寫為實例方法
10:修飾符順序
11:抽象類
無法創建或者不應該創建實例;
無法定義方法的主體。其內容應該在子類實現;
12:抽象類和方法定義
abstract 類名{};
abstract 方法名();;
13:抽象類中可以包含非抽象方法(抽象類的超類也是Object,Object類中有非抽象方法例如toString),但包含抽象方法的類一定是抽象類;
子類繼承抽象類,要麼實現抽象類全部方法,要麼子類也是抽象類;
抽象類的非抽象方法重寫為抽象方法比如toString方法
14:文檔註釋和javaDoc-這部分網上搜索即可
15:介面-介面是引用類型的一種
介面聲明:interface
介面所有方法都是public且abstract
介面實現:implements,介面實現的方法必須是public修飾符;介面類型的變數可以引用實現類的實例
介面實現類必須實現介面所有的方法,否則實現類定義為抽象類;
介面可以持有常量---public\static\final欄位,即為不可更改的數值的類變數
介面本身的訪問修飾符與類相同-可以加public修飾符
當類聲明同時存在extends 和 implements一定要先寫extends,一個類可以實現多個介面
介面也可以進行派生新的介面