1

我在学校包中有两个班级

班级学校

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

4 回答 4

2

试试这个:

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

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

于 2013-01-11T04:38:10.290 回答
1

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

试着像下面这样打电话。

@Override
public String getName(){
    return "Child Class Name is: " + name;
}
于 2013-01-11T04:45:47.117 回答
0
@Override
public String getName() 
{   
 return  "Child Class Name is: "+ getName();
}

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

于 2013-01-11T04:50:58.043 回答
0

将其更改为以下。现在可以使用

@Override
public String getName() 
{   
 return  "Child Class Name is: "+ super.Name;
}
于 2013-01-11T04:55:19.687 回答