我知道在这里和那里已经回答了名义上的问题,但是每一个答案仍然无法解决我的问题。问题是:
我有一个抽象类,它是Node,包含这样的构造函数:
public Node(List<Record> dataSet, int labelIndex) {
this.allSamples = new ArrayList<Integer>();
this.dataSet = dataSet;
this.classificationLabelIndex = labelIndex;
this.entropy = 0;
}
然后,我将absract类扩展到TreeNode,包含这样的构造函数(使用super):
public TreeNode(List<Record> dataSet, int labelIndex, List<Attribute> attributes, int level, double threshhold) {
super(dataSet, labelIndex);
this.attributes = attributes;
splittedAttrs = new HashSet<Integer>();
this.level = level;
this.displayPrefix = "";
this.children = null;
this.threshhold = threshhold;
}
因此,TreeNode类扩展抽象Node类并使用super方法从Node类调用dataset和labelindex,但后来我得到警告&#34;类Node中的构造函数Node不能应用于给定类型,不需要参数。 &#34;也许是因为我在TreeNode中添加了一些参数,但我仍然认为它不太可能。任何帮助表示赞赏。
答案 0 :(得分:2)
如果没有看到更多细节,很难知道问题所在。不,你不能直接实例化一个抽象类,但是你可以在一个抽象类的子类的构造函数中调用super,所以你所做的似乎没什么问题。一个想法是确保与另一个名为Node或TreeNode的类没有任何冲突的类路径问题。实际上,如果您已导入这些自定义类,则可以创建类路径中可能已存在的自定义类,例如: https://docs.oracle.com/javase/7/docs/api/javax/swing/tree/TreeNode.html https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Node.html
尝试将它们重命名为更具体的内容,例如MyTreeNode和MyNode等等。
无论如何,我尽可能地使用您发送的代码进行复制,并且没有看到任何问题(即我的类路径中没有与其他导入冲突)。检查一下,看看它是否与你的相符。如果没有,请复制/粘贴错误的堆栈跟踪以及所有代码。感谢
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
import java.util.List;
public abstract class Node {
private List<Integer> allSamples;
private List<Record> dataSet;
private int classificationLabelIndex;
private int entropy;
public Node(List<Record> dataSet, int labelIndex) {
this.allSamples = new ArrayList<Integer>();
this.dataSet = dataSet;
this.classificationLabelIndex = labelIndex;
this.entropy = 0;
}
}
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TreeNode extends Node {
private List<Attribute> attributes;
private Set<Integer> splittedAttrs;
private int level;
private String displayPrefix;
private Object children;
private double threshhold;
public TreeNode(List<Record> dataSet, int labelIndex,
List<Attribute> attributes, int level, double threshhold) {
super(dataSet, labelIndex);
this.attributes = attributes;
splittedAttrs = new HashSet<Integer>();
this.level = level;
this.displayPrefix = "";
this.children = null;
this.threshhold = threshhold;
}
public static void main(String[] args) {
Node node = new TreeNode(new ArrayList<Record>(), 1,
new ArrayList<Attribute>(), 1, 1.1);
}
}
class Record {}
class Attribute {}