[英]Stackoverflow error
下面給出的代碼顯示了運行時的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();
Car() {
c[0] = new Polo();
i=0;
}
由於Polo是Car()的子類-它必須適合Car [] -在構造自身時,它將調用Car的構造函數。 Car構造函數嘗試創建一個新的Polo() 。
由於Polo是Car()的子類-它必須適合Car [] -在構造自身時,它將調用Car的構造函數。 Car構造函數嘗試創建一個新的Polo() 。
由於Polo是Car()的子類-它必須適合Car [] -在構造自身時,它將調用Car的構造函數。 Car構造函數嘗試創建一個新的Polo() 。
...你知道嗎?
stackoverflow通常意味着您有一個無限循環。
收到此消息的原因是因為您從testdrive方法調用驅動器,並且在該方法中再次調用drive。
聽起來您可能發生了一些無限遞歸。
drive()
調用testdrive()
,而class drive()
則調用testdriver()
……直到永遠,或者直到內存用完為止,從而導致堆棧溢出錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.