关于继承的java中的堆栈溢出错误

时间:2014-11-19 04:13:36

标签: java inheritance stack flow

我正在为我的java类简介工作,我正在进行继承。问题出在课程MammalPet上。当我运行驱动程序类时,我在第12行遇到堆栈溢出错误,它会调用setName(inName)的{​​{1}}。有人能指出我正确的方向吗?

Mammal

3 个答案:

答案 0 :(得分:2)

你的问题就在这里,在课堂上Mammal

public void setName(String inName){
    setName(inName);//<-- recursive class
}

请尝试改为,如果你真的想要覆盖它,否则不要这样做

@Override
public void setName(String inName){
    super.setName(inName);
}

答案 1 :(得分:2)

要调用超类方法,您应该写:

public void setName(String inName){
    super.setName(inName);
}

那就是说,如果它只调用超类实现,你真的不需要在子类中实现setName

答案 2 :(得分:0)

致电时

public void setName(String inName){
   setName(inName);
}

你递归地调用该方法并且没有中断来阻止它,因此堆栈会一直递增直到它溢出。您可能希望先尝试使用关键字super来调用父类的方法:

super.setName(inName);

但是由于这是使用此预定义方法的父级的子级,因此除非您希望此方法执行不同的操作,否则您甚至不需要这样做。这是继承点。