Java:扩展一个类,子类的构造函数给出了错误

时间:2013-10-16 15:09:07

标签: java subclass superclass

一点背景:

涉及三个类:Tester(main method)DNASequence(object)ProteinDNA(subclass of DNASequence)。这三个都在同一个包装下。

ProteinDNA的构造函数接受一个对象DNASequence和一个整数

public class ProteinDNA extends DNASequence{
public ProteinDNA(DNASequence dna, int startAt){   //this is the constructor

编译类ProteinDNA会在构造函数中给出错误。

Eclipse中的错误是:

"Implicit super constructor `DNASequence()` is undefined.
 Must explicitly invoke another constructor"

jGrasp中的错误是:

ProteinDNA.java:16: error: 
   constructor DNASequence in class DNASequence cannot be applied to given types;
public ProteinDNA(DNASequence dna, int startAt)^{


     required: String

     found: no arguments

     reason: actual and formal argument lists differ in length"

我做错了什么? Tester类为ProteinDNA提供适当构造的DNASequence实例。

2 个答案:

答案 0 :(得分:1)

Parent Class DNASequence has existing constructor with parameters. There 2 solutions for this.

1)您可以将默认无参数构造函数添加到DNA Sequence类。

2)修改子类构造函数以调用父类构造函数,如下所示

    public ProteinDNA(DNASequence dna, int startAt){

   super(....); // This should be the 1st line in constructor code, add parameters 
                as per parent constructor 
}

答案 1 :(得分:0)

看起来你正试图传递一个DNASequence对象,而失败的东西就是构建那个对象。

  

必需:字符串
  发现:没有参数

这让我觉得你可能会尝试做类似下面的事情:

new ProteinDNA(new DNASequence(), num);

编译器说它需要一个String代替:

new ProteinDNA(new DNASequence("SOME STRING"), num);

这有意义吗?

如果您发布一些特定代码,也许我们会更有帮助,即:

  • ProteinDNA构造函数调用
  • DNASequence构造函数签名
  • 测试方法的代码

另外,你能澄清为什么,如果ProteinDNA是DNASequence的一个亚类,你是否正在将DNASequence传递给它的构造函数?这是某种防御性的副本吗?

另外,如备选答案中所述,您可能希望将对超级构造函数(DNASequence(String))的调用添加到子构造函数中,作为第一行,如下所示:

super("SOME STRING")

但那真的取决于你的逻辑......