Java扩展类

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

我有一个会议类,我想创建一个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课程:

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参数构造函数的超类。