1

スクールパッケージに2つのクラスがあります

クラススクール

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 メソッドは正常に動作しています。2 番目のメソッドを使用しようとすると、例外が発生します。

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 に答える