一点背景:
涉及三个类: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
实例。
答案 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的一个亚类,你是否正在将DNASequence传递给它的构造函数?这是某种防御性的副本吗?
另外,如备选答案中所述,您可能希望将对超级构造函数(DNASequence(String)
)的调用添加到子构造函数中,作为第一行,如下所示:
super("SOME STRING")
但那真的取决于你的逻辑......