【问题标题】:Extending subclass from parentclass says there are no default constructors?从父类扩展子类说没有默认构造函数?
【发布时间】:2019-03-31 17:06:05
【问题描述】:

我正在尝试从 LesEenheid 类继承到 Vak 的子类。但我立即收到一条消息:com.company.LesEenheid 中没有可用的默认构造函数。

package com.company;

public class LesEenheid {
    private String naam;
    private int ects;
    private int studiejaar;

    public LesEenheid(String lesNaam, int lesEcts, int lesStudiejaar){
        naam = lesNaam;
        ects = lesEcts;
        studiejaar =lesStudiejaar;
    }

    public String toString(){
        return naam + " " + ects + " " + studiejaar;
    }
}

public class Vak extends LesEenheid {



}

【问题讨论】:

  • Java 只会在没有显式构造函数的情况下创建默认构造函数。既然你定义了一个构造函数,你应该定义一个默认构造函数
  • 嗯,错误很明显——没有默认构造函数。相反,您有一个带参数的:public LesEenheid(String lesNaam, int lesEcts, int lesStudiejaar),因此您的子类将不得不调用它。只需在您的子类中创建一个构造函数并在其中调用super(a,b,c,d, etc)
  • Java default constructor的可能重复

标签: java oop


【解决方案1】:

在您的情况下,您必须在父类中定义相同的构造函数:

public Vak (String lesNaam, int lesEcts, int lesStudiejaar) {

}

如果要使用默认构造函数,需要将其包含在超类中:

public LesEenheid() {

}

【讨论】:

    【解决方案2】:

    你只需要调用超类(LesEenheid)构造函数,这样你就可以将参数传递给超类构造函数并初始化超类变量

    package com.company;
    
    public class LesEenheid {
        private String naam;
        private int ects;
        private int studiejaar;
    
        public LesEenheid(String lesNaam, int lesEcts, int lesStudiejaar){
            naam = lesNaam;
            ects = lesEcts;
            studiejaar =lesStudiejaar;
        }
    
        public String toString(){
            return naam + " " + ects + " " + studiejaar;
        }
    }
    
    public class Vak extends LesEenheid {
    
        public Vak(String lesNaam, int lesEcts, int lesStudiejaar)
        {
            Super(lesNaam, lesEcts, lesStudiejaar);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      相关资源
      最近更新 更多