一、繼承的初始化順序
1.初始化父類,再初始化子類。
2.先執行初始化對象中的屬性,再執行構造方法中的初始化。
二、下面,我們用一個簡單的例子來說明這一問題:
父類:Animal代碼:
package com.bluesky;public class Animal {public Animal(){System.out.println("動物類的構造方法執行了。");}}
子類:Dog代碼:
package com.bluesky;public class Dog extends Animal {public Dog(){System.out.println("子類的建構函式執行了。"); }}
測試類別:Test代碼:
package com.bluesky;public class Test {public static void main(String[] args) {Dog dog = new Dog();}}
執行結果:
上面說明先執行父類構造方法,然後才執行子類的構造方法。
下面,我們稍微加點代碼,來看下屬性和構造方法的執行順序
父類:Animal代碼:
package com.bluesky;public class Animal {public int age=10; //如果構造方法先執行,屬性後執行,則age的值應該為:10; //因為後面賦值會覆蓋前面的賦值 public Animal(){ age=20; //同理System.out.println("動物類的構造方法執行了。");}}
子類:Dog類代碼:
package com.bluesky;public class Dog extends Animal { public String name="Jack"; //如果構造方法先執行,屬性後執行,則name的值應該為:Jack; //因為後面賦值會覆蓋前面的賦值public Dog(){name="Rose";System.out.println("子類的建構函式執行了。"); }}
測試類別:Test代碼:
package com.bluesky;public class Test {public static void main(String[] args) {Dog dog = new Dog();System.out.println("dog.age="+dog.age);System.out.println("dog.name="+dog.name);}}
運行結果:
總結:關於Java中繼承的初始化順序:
先初始化父類對象的屬性,然後初始化父類的構造方法。
再初始化子類對象的屬性,最後初始化子類的構造方法。