先看看下面幾個類,而後判斷它們的輸出
public class A {ide
static{
System.out.print(1);
}
public A(){
System.out.print(2);
}
}函數
public class B extends A{對象
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}繼承
public class C {接口
public static void main(String[] args){
A a = new B();
a = new B();
}
}
----------------------------------------------------------------------------------------------
父類與子類執行的前後順序
靜態變量的執行特性
方法重寫(override)的注意事項
1.
當父類與子類都有靜態代碼塊和構造函數的時候,執行順序以下:
父類靜態代碼塊 > 子類靜態代碼塊
父類構造函數 > 子類構造函數(先有父親,後有孩子)
若是是多級繼承關係的話,最高層的父類首先執行,而後依次遞減class
總結:靜態優先執行,父類優先執行
注意:靜態代碼塊是在JVM加載類的時候執行的,並且靜態代碼塊執行且僅執行一次變量
2.
在調用類中的方法時,在方法體執行以前,首先要對類中的成員變量進行賦值,若是代碼中沒有賦具體的值,也有默認值。成員變量的賦值順序按照先後順序進行。
若是有既有直接賦值,也有構造方法賦值,那麼根據前後順序執行構造函數
3.
重寫(Override) 重載(Overload)
重載是方法名字,返回類型一致,惟一不一樣的是方法的參數不一樣(參數類型不一樣,或者參數類型不一樣)引用
重寫:
1. 發生方法重寫的兩個方法返回值,方法名,參數列表必須徹底一致
2. 子類拋出的異常不能超過父類相應的方法拋出的異常
3. 子類方法的訪問級別不能低於父類相應方法的訪問級別(public,package,protected, private)程序
多態:父類的引用指向了子類的對象,調用時執行的方法也是子類的方法,父類的方法並不會被執行
所謂多態就是父類或者接口類型的引用能夠指向子類或者實現該接口的類的實例(對象)
看了上面的說明,你們也應該知道上面的程序輸出結果了。輸出結果爲:1a2b2b