关于构造函数的Java继承
因此,我试图通过将java应用于一些数学作业并使用继承制作频率分布图来练习我的java技能。在我的脑海中,我把它想象成一个频率分布父类=FreqDist,它可以以MyStatClass数组的形式拥有多个MyStatClass。每个FreqDist都有跨越所有MyStatClass的变量,这就是我将它们放在父类中的原因。然而,当我调用MyStatClass构造函数时,我的程序会得到一个StackOverflower错误。我认为这是因为supers,I line调用FreqDist构造函数并重新开始,导致了一个无限循环。假设是这样,我该如何解决这个问题 理想情况下,我希望访问我的MyStatClass数组并获取仅适用于该MyStatClass的值,但我无法让它工作关于构造函数的Java继承,java,inheritance,constructor,Java,Inheritance,Constructor,因此,我试图通过将java应用于一些数学作业并使用继承制作频率分布图来练习我的java技能。在我的脑海中,我把它想象成一个频率分布父类=FreqDist,它可以以MyStatClass数组的形式拥有多个MyStatClass。每个FreqDist都有跨越所有MyStatClass的变量,这就是我将它们放在父类中的原因。然而,当我调用MyStatClass构造函数时,我的程序会得到一个StackOverflower错误。我认为这是因为supers,I line调用FreqDist构造函数并重新开始
public class FreqDist {
private MyStatClass[] freqClasses;
private double[] dblValuesArray;
private int intNumberOfClasses;
private double dblMax;
private double dblMin;
private int intClassWidth;
public FreqDist(String strValues, int intNumOfClasses) {
System.out.println("This is the beginning of the FreqDist constructor...");
dblValuesArray = getDoubleValues(strValues);
intNumberOfClasses = intNumOfClasses;
dblMin = dblValuesArray[0];
dblMax = dblValuesArray[dblValuesArray.length - 1];
intClassWidth = (int)Math.ceil((dblMax - dblMin) / intNumberOfClasses);
freqClasses = new MyStatClass[intNumberOfClasses];
for (int x = 0; x < freqClasses.length; x++) {
freqClasses[x] = new MyStatClass(strValues, intNumOfClasses);
}
}
public double[] getDoubleValues(String strValues) {
String[] strValuesArray = strValues.trim().split(" ");
dblValuesArray = new double[strValuesArray.length];
for (int x = 0; x < strValuesArray.length; x++) {
dblValuesArray[x] = Double.parseDouble(strValuesArray[x]);
}
Arrays.sort(dblValuesArray);
return dblValuesArray;
}
public int getNumberOfClasses() {
return intNumberOfClasses;
}
public double getMin() {
return dblMin;
}
public double getMax() {
return dblMax;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("What are the values? ");
String values = scan.nextLine();
System.out.print("How many classes? ");
int classes = scan.nextInt();
FreqDist fd = new FreqDist(values, classes);
}
}
public class MyStatClass extends FreqDist {
public MyStatClass(String s, int i) {
super(s, i);
}
}
好吧,这主要是因为你的设计有缺陷 据我所知,FreqDist是一个应该包含MyStatClass数组的类。您希望它们具有相同的属性,因此可以使MyStatClass扩展FreqDist。然而,当你调用FreqDist时,它就是MyStatClass,它一遍又一遍地调用一个新的MyStatClass
解决这个问题的一种方法是创建一个新类,该类具有您希望FreqDist和MyStatClass具有的共享属性,并让这两个类从该类继承。然后为FreqDist和MyStatClass创建单独的构造函数。父类型决不能像您的子类型那样引用自己的子类型。她的父项初始化子类型实例,这要求每个子类型实例初始化父类型,这初始化子类型实例,这初始化它们的父类型,这初始化。。。卡布鲁伊 为什么MyStatClass需要是FreqDist的子类?我希望每个MyStatClass都有来自FreqDist的相同属性,而每个MyStatClass都有各自独立的属性。继承模式中有一个循环,这会导致StackOverflower错误。中断此循环以避免错误。谢谢。我对Java没问题,也没有那么丰富的经验,所以我非常感谢您的帮助。我想如果有什么不对劲,那就是我的总体设计。肯定是我将来需要做的事情。他们知道这一点。请参阅他们的第一段。因此,正如我所建议的,不要在父类型中引用子类型。