Java 堆栈溢出错误
下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我创建另一个类CarChange来创建Car的对象,它将成功运行。我是一个初学者,编写这段代码是为了理解java中向上转换的重要性Java 堆栈溢出错误,java,stack-overflow,Java,Stack Overflow,下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我创建另一个类CarChange来创建Car的对象,它将成功运行。我是一个初学者,编写这段代码是为了理解java中向上转换的重要性 public class Car { int i; Car[] c=new Car[2]; Car() { c[0] = new Polo(); i=0; } void drive(){ c[i].t
public class Car {
int i;
Car[] c=new Car[2];
Car() {
c[0] = new Polo();
i=0;
}
void drive(){
c[i].testdrive(); //the overloaded method in subclasses polo and swift
}
void change() {
if(i==0) {
i++;
c[i] = new Swift();
}
}
public void testdrive() {
//overloaded method in subclasses polo and swift
System.out.println(" test drive car");
}
//class Tester {
//main
Car c= new Car();
c.drive();
c.change();
c.drive();
stackoverflow通常意味着有一个无限循环
您收到此消息的原因是,您正在从testdrive方法调用drive,并且在该方法中再次调用drive。听起来您可能发生了一些无限递归
drive()
Car() {
c[0] = new Polo();
i=0;
}
由于Polo是Car()的一个子类-它必须适合于Car[]-它将在自己构造时调用Car的构造函数。汽车构造师尝试创建一个新的Polo()
由于Polo是Car()的一个子类-它必须适合于Car[]-它将在自己构造时调用Car的构造函数。汽车构造师尝试创建一个新的Polo()
由于Polo是Car()的一个子类-它必须适合于Car[]-它将在自己构造时调用Car的构造函数。汽车构造师尝试创建一个新的Polo()
。。。你明白了吗?使用我的ESP,我猜Polo
是Car
的一个子类,它递归调用Car
的构造函数,以便更快地获得更好的帮助,发布一个。并请使用一致且逻辑形式的缩进代码块。@AndrewThompson感谢您的帮助link@AramKocharyan谢谢,我已经对它进行了编辑,很抱歉代码不清楚,但是testdrive()在其方法体中不调用drive(),错误与在类本身中创建类的对象有关吗(在一个主方法之外),我以前没有见过这样的例子,它合法吗..谢谢我事先编辑了它,很抱歉代码不清楚,但是testdrive()在它的方法体中没有调用drive()-这个错误与在类本身(在主方法之外)中创建类的对象有关吗,我以前没有见过这样的例子,合法吗..提前谢谢我想Brian Roach已经找到了你想要的答案:Polo是你汽车的一个子类,默认构造函数将再次创建Polo的一个新实例。(因为每次创建一个新实例时,它都会调用汽车的构造函数)