我有一个Meeting类,我想创建一个扩展Meeting的BusinessMeeting类。
这是我的会议课程:
public class Meeting {
private String name;
private String location;
private int start, stop;
public Meeting(String name, String location, int start, int stop) {
this.name = name;
this.location = location;
this.start = start;
this.stop = stop;
}
这是我的BusinessMeeting类:
public class BusinessMeeting extends Meeting {
public BusinessMeeting() {
super();
}
}
在我的BusinessMeeting课程中,我收到错误:
构造函数类会议中的会议不能应用于给定类型; required:String,String,int,int 发现:没有参数
我不确定为什么我收到该错误消息。 BusinessMeeting类不应该继承Meeting类中的所有变量吗?
答案 0 :(得分:5)
您创建的构造函数接受4个参数,您可以在没有任何参数的情况下调用它。
如果您希望在没有参数的情况下初始化它 - 将空构造函数添加到Meeting
:
public Meeting(){}
答案 1 :(得分:5)
public class Meeting {
public Meeting(String name, String location, int start, int stop) {
this.name = name;
this.location = location;
this.start = start;
this.stop = stop;
}
}
现在说您希望使用BusinessMeeting
扩展businessId
课程。
public class BusinessMeeting {
private Integer businessId;
public BusinessMeeting(String name, String location, int start, int stop, int business) {
// because super calls one of the super class constructors(you can overload constructors), you need to pass the parameters required.
super(name, location, start, stop);
businessId = business;
}
}
答案 2 :(得分:2)
您正在使用空参数调用超类构造函数:
public BusinessMeeting() {
super();
}
但是你的超类有构造函数:Meeting(String, String, int, int)
。
使用 super(),将调用超类无参数构造函数(如果存在)。使用 super(参数列表),将调用具有匹配参数列表的超类构造函数。因此,您必须向Meeting例如public Meeting(){}
添加一个带有空参数的构造函数,或者您需要调用super(String, String, int, int)
public class Meeting {
// your variable declaration
public Meeting(String name, String location, int start, int stop) {
// your assignment
}
public Meeting(){}
}
public class BusinessMeeting extends Meeting {
public BusinessMeeting()
{
// super(); un-comment if you need to check by commenting below
super("name", "loc", 1, -1);
}
}
答案 3 :(得分:1)
通过声明构造函数,您的Meeting
类没有0参数构造函数,这是您尝试使用super();
调用的函数。您需要调用与超类中可用构造函数匹配的超级构造函数。
要解决此问题,请将0参数构造函数添加到Meeting
类,或调用您已有的4参数构造函数。
答案 4 :(得分:1)
正如alfasin所说,你已经创建了一个构造函数。 standard表示如果没有定义其他构造函数,则创建此构造函数。如果要调用super()
,则必须自己创建无参数构造函数答案 5 :(得分:1)
是和否。这取决于你如何声明变量。
子类无法访问超类中的私有变量。通常,您将受保护的getter和setter-Methods添加到超类中。可以在子类中使用这些方法来访问变量。 (有时候草率的方式是将变量声明为受保护的)
子类不继承其父类的私有成员。但是,如果超类具有访问其私有字段的公共或受保护方法,则子类也可以使用这些方法。 Java Inheritance Webpage
但是关于你提到的错误:
您正在呼叫super()
。这意味着您正在调用超类的默认构造函数。由于您在超类中编写了自己的构造函数,因此没有默认构造函数。只有在未定义构造函数时才会创建后者。
因此,当调用超类的构造函数时 - 你的情况是四个参数 - 你必须通过super()
传递这些参数,如下所示:
super("a name", "a location", 0, 1)
答案 6 :(得分:0)
您应该在会议课程中添加带有空参数的构造函数,或者您可以在BussinessMeeting类中调用super(name,location,start,stop)而不是super()