2015-02-24 41 views
0

我有這個類,聯繫人:的Java找不到父類

public class Person{ 
    String firstname; 
    String lastname; 

    public Person(String fname, String lname){ 

    } 
    public String toString(){ 

    } 
} 

而這個子類,學生:

public class Student extends Person{ 
    Student(){ 
    super(); 
    } 
    int studentID; 
    int level; 

    public Student(String fName, String lName, int gLevel){ 

    } 
    public int getLevel(){ 

    } 
    public String toString(){ 

    } 
} 

當我在DrJava編譯,我得到的錯誤:

cannot find symbol 
symbol : constructor Person() 
location: class Person 

我不確定是什麼問題。我的理解是使用super()構造函數應該可以解決這個問題,而且在代碼中甚至不需要。我的代碼與我在網上看到的任何示例都可以展示Java中的繼承,但我仍然會遇到這個錯誤。

+1

你怎麼看'超()'電話? – 2015-02-24 14:48:49

+0

我的理解是,super()將父類中的參數傳遞給子類。 – 2015-02-24 14:50:09

+1

反過來:從小孩到父母。但是,它仍然在哪裏提供這個?你沒有一個不帶參數的構造函數。 – 2015-02-24 14:50:49

回答

5

調用​​假設在Person類中有一個默認的構造函數,但沒有這樣的,因爲您有一個非默認構造函數。

你必須要麼明確提供默認的構造函數:

public Person() { } 

傳中super聲明兩個參數:

super("Firstname", "Lastname"); 
0

這是因爲有no zero argument constructordefault constructor本在你的人員類別中。

由於每個子構造函數都隱式地在其中調用父類構造函數,它的第一行爲super()所以同樣的方法調用Student類的構造函數,並且無法找到父類中的默認構造函數。

爲什麼Java Compiler不會自動提供默認的構造函數/隱含由於parameterised Constuctor已經存在於你的父類