下面给出的代码显示了当我创建另一个类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();发布于 2012-02-03 14:49:18
堆栈溢出通常意味着你有一个无限循环。
您收到此消息的原因是,您正在从testdrive方法调用drive,而在该方法中,您将再次调用drive。
发布于 2012-02-03 15:38:08
Car() {
c[0] = new Polo();
i=0;
}因为Polo是Car()的子类-它必须适合Car[] -它将在构造自己时调用汽车的构造函数。汽车构造函数尝试创建一个新的Polo()。
因为Polo是Car()的子类-它必须适合Car[] -它将在构造自己时调用汽车的构造函数。汽车构造函数尝试创建一个新的Polo()。
因为Polo是Car()的子类-它必须适合Car[] -它将在构造自己时调用汽车的构造函数。汽车构造函数尝试创建一个新的Polo()。
..。你明白了吗?
发布于 2012-02-03 14:49:50
听起来你可能会有一些无限的递归发生。
drive()调用testdrive(),class drive()调用testdriver()...forever,或者直到内存耗尽,从而导致堆栈溢出错误。
https://stackoverflow.com/questions/9124733
复制相似问题