構造函數是對象的基本,沒有構造函數就沒有對象。
如果在父類中(這里就是你的抽象類)中顯示的寫了有參數的構造函數,在子類繼承是就必須寫一個構造函數來調用父類的構造函數
public abstract class Person { int a = 0;
//如果不寫Person(),java會默認加上一個不帶參數的構造函數,即Person(){};
Person() { a = 10;
System.out.println("class is " + Person.class);
} Person(int x) { a = x; } }
子類
public class Student extends Person { int b = 0;
Student() {
//super();//可不寫,默認調用Person(); b = 100;
System.out.println("class is " + Student.class); } Student(int x) {
//super(x);此處若不顯示調用父類的帶參構造函數,則默認調用 無參 構造函數Person();
b = 200;
} }
測試類
public class abTest { public static void main(String[] args) { Student s = new Student(); System.out.println(s.a); Student s1 = new Student(1000); System.out.println(s1.a); } }
輸出
class is class AbstractClz.Ab_1.Person class is class AbstractClz.Ab_1.Student 10 class is class AbstractClz.Ab_1.Person 10
結論:
無參:調用子類的構造函數前,先執行父類的構造函數。
帶參:帶參構造函數需顯示調用super(x),才能調用父類的Person(int x),否則調用默認Person();
