當您定義自己的構造函數時,java編譯器不再自動插入默認構造函數。
在你的代碼中,當構造B時,第一行隱式調用超類構造器。儘管由於您已經重寫了A的默認構造方法,因此編譯器不會自動使用必要參數自動調用超類構造函數,所以不存在構造函數調用。您應該在B構造函數的第一行添加一行,以便使用它需要的int參數調用A的超類構造函數,或者爲A定義構造函數,類似於不帶參數的默認構造函數。
您可以重載構造函數,以便一個構造函數像默認構造函數一樣是無參數的,然後有其他構造函數接受參數。 :d
這方面的一個例子如下,根據您的代碼:
class A
{
private int a;
A(int a)
{
this.a =a;
System.out.println("This is constructor of class A");
}
//overload constructor with parameterless constructor similar to default
A() {
System.out.println("this is like a default no-args constructor");
}
} // end class A
class B extends A
{
private int b;
private double c;
// add in another constructor for B that callers can use
B() {
int b = 9;
System.out.println("new B made in parameterless constructor");
}
B(int b,double c)
{
super(b); // this calls class A's constructor that takes an int argument :D
this.b=b;
this.c=c;
System.out.println("This is constructor of class B");
}
} // end class B
這是基本的基本Java 101,在這裏發佈之前,您應該努力學習使用教程和其他資源。請閱讀[FAQ]和[Ask]瞭解StackOverflow的用途和範圍。提示:它的目的是作爲解決實際問題的長期資源,而不是獲得基本的教程指導。關於SO的問題和答案旨在對未來的搜索者有用,因此複製這種類型的信息幾乎沒有長期價值。 –