1、繼承的初始化順序:
父類—>父類的初始化對象中的屬性—>父類的構造方法—>子類—>子類的初始化對象中的屬性—>子類的構造方法
若有構造方法:則先執行屬性,再執行構造方法
若構造方法中沒有對name屬性進行賦值,則name的值為類屬性所賦的值
package com.wangcf; //父類 public class Animal { public String name="屬性的初始化"; public int age; public void eat(){ System.out.println("動物可以吃東西"); } public Animal(){ name="構造方法的初始化"; System.out.println("父類的構造方法執行了"); } }
package com.wangcf; //子類 public class Bridge extends Animal{ public String name="子類屬性"; public Bridge(){ System.out.println("子類的構造方法執行了"); } }
package com.wangcf; //測試類 public class Test { public static void main(String[] args) { Bridge bri=new Bridge(); //測試初始化順序 System.out.println(bri.name); //測試屬性的賦值方式 System.out.println("============="); Animal ani=new Animal(); System.out.println("輸出值為:"+ani.name); //測試屬性的賦值方式 } }
2.fianl
可以修飾類,則該類不能被繼承
可以修飾方法,則該方法不能被重寫
可以修飾屬性:則該類的屬性不會進行隱式的初始化,也就是必須賦值final int a=1,正確;fianl int a;錯誤
或者在構造方法中賦值
以上兩種方式選擇一種
可以修飾變量:則只可以賦值一次,那么就是常量了
3.super關鍵字
在子類的對象的內部使用,可以代表父類對象,訪問父類屬性super.abc和方法super.abc();super()是父類不帶參數的構造方法,super(int i,String s)父類帶參數的構造方法?
package com.wangcf; //父類 public class Animal { public String name="父類的名字"; public void eat(){ System.out.println("父類:動物可以吃東西"); } }
package com.wangcf; //子類 public class Bridge extends Animal{ String name="子類的名字"; public void eat(){ System.out.println("子類:鳥兒喜歡吃蟲子"); } public void method(){ System.out.println(name); // 調用子類的屬性 System.out.println(super.name); //調用父類的屬性 eat(); //調用子類的方法 super.eat(); //調用父類的方法 } }
package com.wangcf; //測試類 public class Test { public static void main(String[] args) { Bridge bri=new Bridge(); bri.method(); } }
super的應用:
子類的構造過程當中必須調用父類的構造方法,因為子類在初始化時需要先初始化父類,在這里隱式地使用了super關鍵字,在子類的構造方法中是這樣的:
public Bridge(){ super(); //此處寫或者不寫效果一樣 }
如果子類的構造方法中沒有顯式地調用父類的構造方法那么系統默認調用父類無參的構造方法
如果顯式地調用構造方法,必須在子類的構造方法的第一行
如果子類構造方法中既沒有顯式調用父類的構造方法,而父類又沒有無參的構造發放,那么久會編譯出錯