父子类StackOverflowError异常

时间:2013-01-11 04:33:56

标签: java java-ee parent-child

我在学校套餐中有两个班级

小学

package school;

public class people 
{
    String Name = null; 

    public String getName() 
    {
        return "Super Class Name : " + Name;
    }

    public void setName(String name) 
    {
        Name = name;
    }
}

班级学生

package school;

public class students extends people 
{

    public static void main(String[] args)
    {
         people objpeople1   = new people();
         people objpeople2   = new students();

         objpeople1.setName("David");
         objpeople2.setName("Davis");

         System.out.println(objpeople1.getName());           
         System.out.println(objpeople2.getName());  
    }

    @Override
    public String getName() 
    {   
     return  "Child Class Name is: "+ getName();
    }
}

第一个getName方法工作正常。当我尝试使用第二个方法生成异常时。

objpeople2.getName()正在生成java.lang.StackOverflowError异常

4 个答案:

答案 0 :(得分:2)

试试这个:

@Override
public String getName(){
    return "Child Class Name is: " + super.getName();
}

您的objpeople2.getName()正在访问当前类的getName(),这会导致以递归方式调用相同的方法,这就是抛出StackOverFlorError Exception的方式。使用super关键字来引用当前类的超类。

答案 1 :(得分:1)

在你的子类中,你递归地调用getName()方法,这会导致内存不足,因此会出现StackOverflowException。

尝试像下面一样打电话。

@Override
public String getName(){
    return "Child Class Name is: " + name;
}

答案 2 :(得分:0)

@Override
public String getName() 
{   
 return  "Child Class Name is: "+ getName();
}

在此方法中,getName()调用为递归调用。因此,它永远不会结束给予StackOverflowException

的相同方法的调用

答案 3 :(得分:0)

将其更改为Below.Its立即工作

@Override
public String getName() 
{   
 return  "Child Class Name is: "+ super.Name;
}