我正在为我的java介绍类做一个项目,并且正在做继承工作。问题出在类Mammal和Pet上。当我运行driver类时,我在第12行得到一个堆栈溢出错误,它调用Mammal的setName(inName)。谁能给我指个方向?
package inlab9;
/**
* Driver for Inlab9.
*
* @author yaw
* @version 14 Nov 2014
*/
public class Driver
{
public static void main(String[] args)
{
Pet p = new Pet("Terrance");
p.printInfo();
System.out.println();
Mammal m = new Mammal();
m.printInfo();
m.setName("Roxie");
m.printInfo();
System.out.println();
Fish f = new Fish("red");
f.printInfo();
f.setName("Shark");
f.printInfo();
System.out.println();
Dog d = new Dog("Watson", "Basset");
d.printInfo();
}
}
package inlab9;
public class Mammal extends Pet {
protected static String name = "Fluffy";
public Mammal(){
super(name);
}
public void setName(String inName){
setName(inName);
}
public void printInfo(){
System.out.println("The pet's name is " +name);
}
}
package inlab9;
public class Pet {
protected String name;
public Pet(String name){
this.name = name;
}
public void printInfo(){
System.out.println("The pets name is " + name);
}
public void setName(String name){
this.name = name;
}
}发布于 2014-11-19 12:15:52
你的问题在这里,在哺乳动物课上
public void setName(String inName){
setName(inName);//<-- recursive class
}相反,如果您真的想覆盖它,请不要这样做
@Override
public void setName(String inName){
super.setName(inName);
}发布于 2014-11-19 12:17:23
要调用超类方法,您应该编写:
public void setName(String inName){
super.setName(inName);
}也就是说,如果子类只调用超类实现,那么您实际上不需要在子类中实现setName。
发布于 2014-11-19 12:19:29
当你调用
public void setName(String inName){
setName(inName);
}您正在递归地调用该方法,并且没有中断来停止它,因此堆栈将一直递增,直到溢出。您可能希望在调用父类的方法之前尝试使用关键字super:
super.setName(inName);
但由于这是具有此预定义方法的父级的子级,因此您甚至不需要此方法,除非您希望此方法做一些不同的事情。这就是继承点。
https://stackoverflow.com/questions/27008832
复制相似问题