带参数或不带参数的子类的构造函数?

问题描述

我必须使用一个名为 Document 的超类和两个子类(DVD 和书)来完成这个程序。基本上这两个子类继承了 Document 的属性+每个子类的一两个特定属性

这是我的超类:

public class Document {

    public String nom;
    public int copiesdispo;
    public String noref;

    public static int nbDocs;

    /*
    ** Constructor(s)
    */

    public Document(String nom,String noref) {

        this.nom = nom;
        this.noref = noref;
        this.copiesdispo = copiesdispo;

        nbDocs++;

    }

}

这是我目前对子类书籍的了解:

public class Livre extends Document {
    
     public Livre() {
        
        super();
        
    }
    
}

虽然这不能编译,似乎我不能这样做,但我之前在以前的程序中已经这样做过并且没有问题..?这里有什么问题/为什么?这是否意味着我必须将超类抽象化?

解决方法

super() 实际上会调用超类的实际构造函数

在这里,您隐藏了默认构造函数(不带参数),因为您在带参数的超类中添加了一个

你可以看看JLS

你基本上有两个选择

  • 向超类添加默认构造函数 public Document() { }
  • 在子类中使用默认参数调用构造函数(不太喜欢的选项)