我正在为我的java类简介工作,我正在进行继承。问题出在课程Mammal
和Pet
上。当我运行驱动程序类时,我在第12行遇到堆栈溢出错误,它会调用setName(inName)
的{{1}}。有人能指出我正确的方向吗?
Mammal
答案 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);
但是由于这是使用此预定义方法的父级的子级,因此除非您希望此方法执行不同的操作,否则您甚至不需要这样做。这是继承点。