package test;class Person { public String name; public int age; public Person(String name) { this.name = name; // this.age = age; System.out.println("Person constructor is called"); }}public class Student extends Person { public int grade; public Student(String name,int age,int grade) { super(name); } public Student(String name,int age) { } public static void main(String[] args) { Student studnet = new Student("jiajiama",20,3); }}會提示如下的報錯:Student.java:18: 錯誤: 無法將類 Person中的構造器 Person應用到給定類型;public Student(String name,int age) { ^需要: String找到: 沒有參數(shù)原因: 實際參數(shù)列表和形式參數(shù)列表長度不同1 個錯誤我的理解是:應該調用student 的三個參數(shù)的構造函數(shù),然后調用super調用父類中只有1個參數(shù)的構造函數(shù),但是現(xiàn)在為什么會報錯呢
2 回答

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
所有的構造方法都需要調用父類的構造方法,你可以通過 this 銜接到類本身的其他構造方法,但是最終必須得存在父類的構造方法(如果父類構造方法無參數(shù),可以省略)。你這個 Student(String name,int age) 構造方法既沒有調用父類的構造方法,也沒有銜接到其他的構造方法里,當然有錯拉。

慕慕森
TA貢獻1856條經驗 獲得超17個贊
某個類如果沒有構造函數(shù),編譯器會自動給添加一個無參構造函數(shù);如果已經有了構造函數(shù),就不會自動添加。
子類的構造函數(shù)必須調用父類的構造函數(shù)。如果沒有顯式地調用父類的構造函數(shù),虛擬機就會自動地去調父類的無參構造函數(shù)。這種情況下,如果父類沒有無參構造函數(shù),編譯器就會報錯。
你的Student第二個構造函數(shù)會去調父類Person的無參構造函數(shù),然而父類只有一個帶參數(shù)的構造 ,所以報錯了。
添加回答
舉報
0/150
提交
取消