2012-01-13 59 views
0

爲什麼它擴展了學校班級給我一個錯誤被創建時,一個新的對象,並在構造函數被調用,並通過參數的正確量用正確的數據類型的年級到構造函數?錯誤的Java擴展一個類時,SE 6

我得到使用Java SE NetBeans中的以下警告6

找不到符號:Constuctor學校();

package school; 

public class School { 
    String name; 
    String location; 
    int pupils; 

    School(String name, String location, int pupils) { 
     this.name = name; 
     this.location = location; 
     this.pupils = pupils; 
    } 

} 

package school; 
public class Grade extends School { 
    School school = new School("Your Schools Name", "Your schools Location", 1700); 
} 
+5

在什麼地球不會甲級延長學校? – Joost 2012-01-13 13:50:13

+0

你也可能想讓'School'構造函數爲'public'。 – Viruzzo 2012-01-13 13:55:03

回答

9

構造函數不能被繼承。你的子類需要自己的構造函數:

Grade(String name, String location, int pupils) { 
    super(name, location, pupils); 
} 

此外,這是非常可疑的設計。一個年級不是學校。

+0

但是如果它是學校的一部分,不應該繼承學校的信息嗎? – Aaron 2012-01-13 13:54:58

+0

@Matthew成績可以參考它所屬的學校。 – 2012-01-13 13:57:11

+0

@Matthew理解繼承的含義是很重要的「是」:如果你寫的'級延伸School',那麼就意味着,'Grade' *是*(專門的版本)'School'。不要因爲需要訪問另一個類的數據而誤用繼承。 – Jesper 2012-01-13 14:00:46

4

如果一個類,如您的年級,沒有一個明確的構造函數這反而給出一個隱含的構造函數不帶任何參數。隱含的構造函數將調用超類的無參構造函數。但是,您的超類沒有沒有參數的構造函數。

1

School沒有默認構造函數School()。你必須創造它才能做你想做的事,儘管我不知道你爲什麼要這樣做。

0

類學校定義了參數的構造函數。因此,編譯器不會爲其生成默認的無參數構造函數。
在課堂上你不定義任何構造函數。所以Java試圖爲它生成一個默認的構造函數,但是不能,因爲它必須調用父類的默認構造函數(不帶參數)並且它不存在。 因此,您需要在Grade中調用現有構造函數(3個參數)或學校中的默認構造函數的默認構造函數。

而且你的產業是沒有意義的。

0

你的子類需要自己的構造如下:

Grade(String name, String location, int pupils) 
    {   
     super(name, location, pupils); 
    }