1. java,中的子類繼承父類,子類如何調用父類的構造函數舉一個簡單的例子加註釋說明
子類無條件調用父類的無參構造函數,實例:
父類:
package com.test;
public class TestFatherClass {
private String name="abc";
TestFatherClass(){
System.out.println("1、這是父類的無參構造函數");
}
TestFatherClass(String a){
System.out.println("2、這是父類的有參構造函數");
}
}
子類:
package com.test;
public class TestChildClass extends TestFatherClass{
TestChildClass(){
System.out.println("3、這是子類的無參構造函數");
}
TestChildClass(String str){
System.out.println("4、這是子類的有參構造函數");
}
public static void main(String[] args) {
System.out.println("實例化對象時:(無參)");
TestChildClass test = new TestChildClass();
System.out.println("實例化對象時:(有參)");
TestChildClass test2 = new TestChildClass("adad");
}
}
輸出結果:
2. java中,子類調用父類函數構造函數中被重寫的方法,輸出語句為什麼是默認值
1,Java的函數調用是虛擬調用,對象名.方法名,調用的都是其真實類型的函數,就是說,對象實際上是一個dog,那麼調用的就是dog的重寫方法。父類構造器之所以被調用,是因為子類的構造器會調用父類的構造器,整個過程實際上是dog的構造。
2,這個和初始化順序有關,new對象時,會先初始化成員變數再調用構造器,所以初始化順序是:父類的成員變數->父類構造器->子類成員變數->子類構造器
也就是說,父類構造器中調用getAge的時候,dog的成員變數還沒有初始化
等到子類構造器中再調用一次的時候,已經完成初始化。