在Java SE 6中扩展类时出错

时间:2012-01-13 13:47:30

标签: java constructor

为什么在创建新对象并调用构造函数并将正确数量类型的参数传递给构造函数时,扩展School类的Grade类会给出错误?

我使用Java Se 6在Netbeans中收到以下警告

  

找不到符号:Constuctor School();

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 个答案:

答案 0 :(得分:9)

构造函数不是继承的。您的子类需要自己的构造函数:

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

此外,这是非常值得怀疑的设计。成绩不是学校。

答案 1 :(得分:4)

如果一个类(如Grade类)没有显式构造函数,则会给它一个不带参数的隐式构造函数。隐式构造函数将调用超类的无参数构造函数。但是,您的超类没有没有参数的构造函数。

答案 2 :(得分:1)

班级School没有默认构造函数School()。你必须创建它才能做你想做的事情,虽然我不知道你为什么要这样做。

答案 3 :(得分:0)

Class School定义了一个带参数的构造函数。因此,编译器不会为它生成默认的无参数构造函数 在类Grade中,您不定义任何构造函数。所以Java试图为它生成一个默认的构造函数,但不能,因为它必须调用父的默认构造函数(没有参数)并且它不存在。 因此,您需要在Grade中使用默认构造函数,该构造函数调用School中的现有构造函数(带有3个args)或学校中的默认构造函数。

你的继承也毫无意义。

答案 4 :(得分:0)

您的子类需要自己的构造函数,如下所示:

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