java面向物件繼承
阿新 • • 發佈:2019-01-10
- 程式碼塊概述:在Java中,使用{}括起來的程式碼被稱為程式碼塊。
程式碼塊分類:根據其位置和宣告的不同,可以分為區域性程式碼塊,構造程式碼塊,靜態程式碼塊,同步程式碼塊。
常見程式碼塊的應用
a:區域性程式碼塊 :在方法中出現;限定變數生命週期,及早釋放,提高記憶體利用率
b:構造程式碼塊 :在類中方法外出現;多個構造方法方法中相同的程式碼存放到一起,每次呼叫構造都執行,並且在構造方法前執行
c:靜態程式碼塊 :在類中方法外出現,加了static修飾;在類中方法外出現,並加上static修飾;用於給類進行初始化,在載入的時候就執行,並且只執行一次。
class Student { static { System.out.println("Student 靜態程式碼塊"); } { System.out.println("Student 構造程式碼塊"); } public Student() { System.out.println("Student 構造方法"); } } class StudentDemo { static { System.out.println("StudentDemo的靜態程式碼塊"); } public static void main(String[] args) { System.out.println("我是main方法"); Student s1 = new Student(); Student s2 = new Student(); } }
- 繼承:多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可
- 通過extends關鍵字可以實現類與類的繼承;class 子類名 extends 父類名 {} ;單獨的這個類稱為父類,基類或者超類;這多個類可以稱為子類或者派生類。
- 繼承的好處:提高了程式碼的複用性、提高了程式碼的維護性、讓類與類之間產生了關係,是多型的前提
- 繼承的弊端:類的耦合性增強了。
- 繼承特點:java只支援單繼承,不支援多繼承,但可以多層繼承
- -繼承的注意事項:子類只能繼承父類所有非私有的成員(成員方法和成員變數)
子類不能繼承父類的構造方法,但是可以通過super(待會兒講)關鍵字去訪問父類構造方法。
不要為了部分功能而去繼承 - this和super的使用
a:呼叫成員變數
this.成員變數 呼叫本類的成員變數
super.成員變數 呼叫父類的成員變數
b:呼叫構造方法
this(…) 呼叫本類的構造方法
super(…) 呼叫父類的構造方法
c:呼叫成員方法
this.成員方法 呼叫本類的成員方法
super.成員方法 呼叫父類的成員方法 - 繼承中的構造方法:子類中所有的構造方法預設都會訪問父類中空引數的構造方法
原因:因為子類會繼承父類中的資料,可能還會使用父類的資料。所以,子類初始化之前,一定要先完成父類資料的初始化。 - 父類沒有無參構造方法,子類怎麼辦?
a: 在父類中新增一個無參的構造方法
b:子類通過super去顯示呼叫父類其他的帶參的構造方法
c:子類通過this去呼叫本類的其他構造方法
本類其他構造也必須首先訪問了父類構造- 注意事項:super(…)或者this(….)必須出現在第一條語句上
class Fu{
public int num = 10;
public Fu(){
System.out.println("fu");
}
}
class Zi extends Fu{
public int num = 20;
public Zi(){
System.out.println("zi");
}
public void show(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
輸出的是
fu
zi
30
20
10
- 方法重寫:子類中出現了和父類中一模一樣的方法宣告(方法名,引數列表,返回值型別),也被稱為方法覆蓋,方法複寫。
- 方法重寫注意:父類中私有方法不能被重寫、子類重寫父類方法時,訪問許可權不能更低,對好一致、父類靜態方法,子類也必須通過靜態方法進行重寫。
- final修飾特點:修飾類:被修飾類不能被繼承
修飾方法: 被修飾的方法不能被重寫
修飾變數: 被修飾的變數不能被重新賦值,因為這個量其實是一個常量