【问题标题】:Constructor of a subclass with arguments or not?带有参数的子类的构造函数?
【发布时间】:2021-07-05 18:53:36
【问题描述】:

我必须使用名为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();
        
    }
    
}

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

【问题讨论】:

  • 如果在没有参数的情况下调用 Document 的构造函数,则需要向 Document 添加一个空的构造函数。
  • 这对你有帮助吗stackoverflow.com/questions/9586367/…
  • copiesDispoDocument 的构造函数中是未知的;请注意,您不像其他两个那样将其作为参数传递。
  • @Jesper 我也应该将它作为参数传递吗?
  • 是的,否则this.copiesDispo = copiesDispo; 不会做任何有用的事情;您可能还想根据参数设置copiesDispo

标签: java class object subclass superclass


【解决方案1】:

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

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

你可以看看JLS

你基本上有两个选择

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

【讨论】:

  • 但是如果我使用默认构造函数,由于在这里声明它们没有值,如何分配这些值?
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 2021-03-12
  • 2021-10-25
相关资源
最近更新 更多