Java扩展类
我有一个会议类,我想创建一个BusinessMeeting类来扩展会议 这是我的会议课:Java扩展类,java,inheritance,Java,Inheritance,我有一个会议类,我想创建一个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
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;
}
public class BusinessMeeting extends Meeting {
public BusinessMeeting() {
super();
}
}
这是我的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;
}
public class BusinessMeeting extends Meeting {
public BusinessMeeting() {
super();
}
}
在我的BusinessMeeting课程中,我遇到了以下错误:
班会中的构造函数会议不能应用于给定类型;
必需:String,String,int,int
找到:没有参数
我真的不知道为什么我会收到那个错误消息。BusinessMeeting类不应该继承my Meeting类的所有变量吗?您创建的构造函数接受4个参数,您调用它时没有任何参数。 如果希望在没有参数的情况下对其进行初始化-将空构造函数添加到
会议中
:
public Meeting(){}
通过声明构造函数,您的
Meeting
类没有0参数构造函数,这就是您试图使用super()调用的构造函数代码>。您需要调用一个超级构造函数,该构造函数与您的超类中可用的构造函数相匹配
若要解决此问题,请将0参数构造函数添加到Meeting
类,或调用现有的4参数构造函数。如阿尔法辛所述,您已创建了一个构造函数。声明如果未定义其他构造函数,则创建此构造函数。如果你想调用super(),你必须自己创建一个无参数构造函数。你应该在meeting类中添加带有空参数的构造函数,或者你可以在BusinessMeeting类中调用super(名称、位置、开始、停止),而不是super()。你正在调用带有空参数的超类构造函数:
public BusinessMeeting() {
super();
}
但是您的超类有构造函数:Meeting(String,String,int,int)
使用super(),将调用超类无参数构造函数(如果存在)。使用super(参数列表),将调用具有匹配参数列表的超类构造函数。因此,您必须向Meeting(例如,public Meeting(){}
添加带有空参数的构造函数,或者需要调用super(String,String,int,int)
签出:
现在假设您想使用businessId
扩展您的BusinessMeeting
类
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;
}
}
是和否。这取决于您如何声明变量
子类无法访问超类中的私有变量。通常将受保护的getter和setter方法添加到超类中。这些方法可以在子类中用于访问变量。
(有时一种草率的方法是将变量本身声明为受保护的)
子类不继承其父类的私有成员。但是,如果超类具有访问其私有字段的公共或受保护方法,则子类也可以使用这些方法
但是关于你提到的错误:
您正在调用super()
。这意味着您正在调用超类的默认构造函数。由于您在超类中编写了自己的构造函数,因此没有默认构造函数。后者仅在未定义构造函数时创建
因此,在调用超类的构造函数时(在本例中为四个参数),必须通过super()
传递这些参数,如下所示:
super(“一个名称”、“一个位置”,0,1)
您认为super()
在做什么?子类继承除构造函数之外的所有成员。您可以在此处加入的可能重复的成员吗?请这回答了你的问题吗?如果定义构造函数,则不会创建默认构造函数。在调用super()时,将空构造函数添加到BusinessMeeting
不会有帮助
到缺少0参数构造函数的超类。