2

一点背景:

涉及三个类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

4

2 回答 2

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

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

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

    public ProteinDNA(DNASequence dna, int startAt){

   super(....); // This should be the 1st line in constructor code, add parameters 
                as per parent constructor 
}
于 2013-10-16T15:17:30.840 回答
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")

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

于 2013-10-16T15:18:17.080 回答