当我尝试编译派生类IntSearchTree时,错误消息
IntSearchTree.java:3: error: constructor IntBinTree in class IntBinTree
cannot be applied to given types;
IntSearchTree(int node, IntSearchTree left, IntSearchTree right) {
required: int,IntBinTree,IntBinTree
found: no arguments
reason: actual and formal argument lists differ in length
1 error
,出现。
以下代码显示了基类最重要的几行:
class IntBinTree {
int node;
IntBinTree left;
IntBinTree right;
IntBinTree(int node, IntBinTree left, IntBinTree right) {
this.node = node;
this.left = left;
this.right = right;
}
}
以及派生类最重要的几行:
class IntSearchTree extends IntBinTree {
IntSearchTree left;
IntSearchTree right;
IntSearchTree(int node, IntSearchTree left, IntSearchTree right) {
this.node = node;
this.left = left;
this.right = right;
}
}
我试图通过为基类中的构造函数提供private修饰符来解决该问题
private IntBinTree(int node, IntBinTree left, IntBinTree right) {...}
,但是编译错误消息是相同的。
第一个问题是,如何以一种在基类中可见但在派生类中不可见的方式定义构造函数?
第二个问题是,即使我使用了private修饰符,为什么基类构造函数在派生类中仍然可见?
答案 0 :(得分:0)
您需要一个无参数的构造函数。
将其放入您的IntBinTree类:
IntBinTree()
{
}
或者您也可以在IntSearchTree类中使用它:
IntSearchTree(int node, IntSearchTree left, IntSearchTree right) {
super(node,left,right);
}
当超类中没有no-args构造函数时,您需要在子类中显式调用要使用的构造函数。这个super()将调用从node, left, right
中提取IntBinTree()
的构造函数。
答案 1 :(得分:0)
我可以看到该实现有两个问题。
super(node, left, right)
或super()
。请记住,默认情况下,java为您创建的任何类创建公共的无参数构造函数。