0

我有两门课,一门叫做俱乐部,一门叫做约会。- 日期扩展俱乐部

当我在下面添加这段代码时:在 Clubs 类中,它会弄乱我的 Date 类以及所有扩展 Clubs 的其他类。

public Clubs(Parcel in) { readFromParcel(in); }

这是我的约会班

public class Date extends Clubs {
    public Date(String day){
        clubName = day;
        date = "";
        eventType = "";     
    }
}

隐式超级构造函数 Clubs() 未定义必须显式调用另一个构造函数

上面的消息是我将鼠标悬停在红色下划线上时收到的错误public Date(String day){

任何帮助将不胜感激:

下面我发布了俱乐部课程

public class Clubs implements Parcelable{   
        protected String clubName;
        protected String address;
        protected String postcode;
        protected String contactName;
        protected String contactPhone;
        String date, eventType, scrutTime, startTime, eventName, week;


        public Clubs(String e){

        }

        public String getDetails() {
            return address + " " + postcode + " " + contactName + " " + contactPhone + " " + date + " " + eventType + " " + scrutTime + " ";    
        }

        public String getEvent() {          
                return date + " " + eventType; 
        }       

        public String getName(){
            return clubName;
        }

        public String getDate(){
            return date;
        }

        public String getWeek(){
            return week;
        }

        public String geteventName(){
            return eventName;
        }

        public void setEvent(String eventType, String date, String scrutTime, String startTime, String eventName, String week) {
            this.eventType = eventType;
            this.date = date; 
            this.scrutTime = scrutTime;
            this.startTime = startTime;
            this.eventName = eventName;
            this.week = week;
        }

        public void setEvent(String eventType, String date) {
            this.eventType = eventType;
            this.date = date; 
        }
4

5 回答 5

1

当超类中没有隐式构造函数时,您必须直接调用其中一个构造函数。

本例中的 Clubs 类定义了Clubs(Parcel in)构造函数,也就是说,zou 要么必须创建一个不带参数 ( public Clubs() {...}) 的构造函数,要么使用super(args)构造函数调用来调用它。

public class Date extends Clubs {
    public Date(String day,Parcel in){ // argument added
        super(in);            //this line added, passing argument to super constructor
        clubName = day;
        date = "";
        eventType = "";     
    }
}

需要考虑的注意事项:

  • 超级构造函数调用必须是构造函数中的第一个。
  • 你还在构造函数中,对象还没有准备好!在调用超级构造函数之前,只能在类上调用静态函数!
于 2013-09-07T22:14:37.930 回答
1

编写子类时,编译器会自动将调用超构造函数(超类的构造函数)作为子类构造函数的第一行插入。但是,您的 Clubs 类没有默认构造函数(没有参数的构造函数),并且编译器不知道使用哪个 String 参数调用存在的构造函数,因此它会抱怨。

要解决您的问题,您必须在 Date 构造函数的第一行添加以下内容:

super("some string that makes sense in your case");
于 2013-09-07T22:15:44.650 回答
0

问题是子类的构造函数必须首先调用父类的构造函数。如果父级具有默认构造函数(没有参数的构造函数),则调用它。在您的情况下,您有一个带有 args 的构造函数,因此没有默认构造函数,您必须显式调用构造函数:

public class Date extends Clubs {
    public Date(String day) {
        super(null); // You can either pass null or an actual object
        /// Rest of the code
}

另一种选择是创建一个默认Parcel实例并传递它而不是传递 null。您还可以创建一个获取Parcel实例的构造函数:

public class Date extends Clubs {
    public Date(Parcel p) {
        super(p);
        /// Rest of the code
}
于 2013-09-07T22:14:44.897 回答
0

当构造一个作为子类的类时(除了 之外的任何东西new Object()),Java 需要从Object构造函数开始并向下工作,以确保每个类的所有内部状态都已准备好供其子类使用。如果您没有调用super构造函数(必须是第一条语句),Java 将尝试使用无参数隐式调用super(). 您需要super为某些构造函数调用适当的参数,Clubs或者向其添加无参数构造函数。

于 2013-09-07T22:15:31.720 回答
0

类的构造函数必须始终调用其超类的构造函数(这将调用其超类的构造函数,依此类推……)。

您可以通过使用显式调用超类构造函数super([constructor parameters])。如果不显式调用它,将自动添加对超类的默认构造函数(即不带参数的构造函数)的调用。

当超类没有默认构造函数时会出现问题,您必须使用super([constructor parameters])指令指定将调用超类的哪个构造函数(以及使用哪些参数)。在你的情况下,它可能是super(day);

于 2013-09-07T22:16:59.017 回答