2013-08-27 99 views
0

我正在製作一個學生數據庫應用程序,它有不同類型的學生來練習繼承並體驗其他OO原則。Netbeans拋出有關超級構造函數的錯誤

我有幾個類從超級「學生」類繼承。問題是我無法讓子類重載構造函數。

Netbeans對於Student構造函數顯然很好,但它告訴我在子類中在超類中找不到合適的構造函數。僅此而已,我完全困惑。

這是迄今爲止代碼:

class MyDB { 

    public abstract class Student { 
     //Variable declaration 
     // 
     public String firstName; 
     public String lastName; 
     public int studentID; 
     public float gpa; 
     public String status; 
     public String mentor; 

     //Constructor & overloaded constructors 
     // 
     public Student(String fn, String ln, int ID, float sgpa, String stat, String m) { 
      firstName = fn; 
      lastName = ln; 
      studentID = ID; 
      gpa = sgpa; 
      status = stat; 
      mentor = m; 
     } 

     public Student(String fn, String ln) { 
      this(fn, ln, 0, 0, "", ""); 
     } 

     //Class Methods 
     // 
     public abstract float calculateTuition(String status, float numberOfCreditHours); 
         //Tuition is Calculated 
       /* 
      if(status == "resident") { 
       if(undergraduate) { 
        if(tuition) { 
         return numberOfCreditHours * 200; 
        } else { 
         return numberOfCreditHours * 250; 
        } 
       } else { 
        return numberOfCreditHours * 300; 
       } 
      } else { 
       if(undergraduate) { 
        if(tuition) { 
         return numberOfCreditHours * 400; 
        } else { 
         return numberOfCreditHours * 450; 
        } 
       } else { 
         return numberOfCreditHours * 350; 
       } 
      } 
     */ 


       public abstract void update(); 
      //Database entry is updated 
     public abstract void add(); 
      //Database entry for student is created 
     public abstract void delete(); 
      //Database entry for student is deleted 
     public abstract void query(); 
      //Query to DB is made, then info is returned to the screen 
    } 

    public class Undergraduate extends Student { 
     private String level; 
     private final String m; 

     public String getLevel() { 
      return level; 
     } 
     public void setLevel(String newLevel) { 
      level = newLevel; 
     } 

       //Overloaded Constructor 
     public Undergraduate(String newlevel, String fn, String ln, int ID, float sgpa, String stat, String m) { 
     } 

     @Override 
     public float calculateTuition(String status, float numberOfCreditHours) { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void update() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void add() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void delete() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void query() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 
    } 

    public class Graduate extends Student { 
     private String thesisTitle; 
     private String thesisAdvisor; 

     public String getThesisTitle() { 
      return thesisTitle; 
     } 
     public String getThesisAdvisor() { 
      return thesisAdvisor; 
     } 
     public void setThesisTitle(String newThesisTitle) { 
      thesisTitle = newThesisTitle; 
     } 
     public void setThesisAdvisor(String newThesisAdvisor) { 
      thesisAdvisor = newThesisAdvisor; 
     } 

       //Overloaded Constructor 

     @Override 
     public float calculateTuition(String status, float numberOfCreditHours) { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void update() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void add() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void delete() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void query() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 
    } 

    public class PartTime extends Student { 
     private String company; 
        //Name of sponsoring employer 

     public String getCompany() { 
      return company; 
     } 
     public void setCompany(String newCompany) { 
      company = newCompany; 
     } 

       //Overloaded Constructor 

     @Override 
     public float calculateTuition(String status, float numberOfCreditHours) { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void update() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void add() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void delete() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void query() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 
    } 




    public static void main(String[] args) { 
    } 
} 

請忽略覆蓋報表。他們看起來很亂,因爲我讓netbeans自動執行任何想要擺脫錯誤的操作。

應用程序還有更多工作要做,但現在問題出現在構造函數中。

我已經檢查過的教程和問題通常涉及重寫相同類的構造函數或不覆蓋構造函數的子類。

+0

編譯錯誤*被打印,*不被「拋出」。引發異常。 – EJP

回答

2

您的子類必須調用其父構造函數之一。當類有一個默認(無參數)構造函數時,這是隱式完成的。由於Student沒有一個無參數的構造函數,那麼無論從它延伸必須調用它的構造之一,其構造,如

public class Undergraduate extends Student { 
    public Undergraduate() { 
     super(null, null); 
    } 
    public Undergraduate(String fn, String ln) { 
     super(fn, ln); 
    } 
    //... 
} 

否則,只需添加一個默認的構造函數來Student

protected Student() { 
    this(null, null); 
} 
+0

好吧,這是有道理的。儘管netbeans已經接受了,但我覺得Student可能會缺少某些東西。你知道一個很好的資源,我可能能夠更好地理解這一點嗎? oracle文檔在我能找到的一篇特定文章中沒有提到。至少不是初學者的oracle文檔。 – user2719912

+0

它覆蓋在這裏:http://docs.oracle.com/javase/tutorial/java/IandI/super.html – superEb