Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 堆栈溢出错误_Java_Stack Overflow - Fatal编程技术网

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

下面给出的代码显示了运行时的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].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的一个新实例。(因为每次创建一个新实例时,它都会调用汽车的构造函数)