2011-10-05 11 views
2
public class Example { 

    public static void main(String args[]){ 
     Parent p = new Child(); 
     p.m2(); 
    } 
} 

class Parent{ 

    void m1(){ 
     System.out.println("Parent : m1"); 
     m2(); 
    } 

    void m2(){ 
     System.out.println("Parent : m2"); 
    } 
} 

class Child extends Parent{ 
    void m1(){ 
     super.m1(); 
     System.out.println("Child : m1"); 
    } 
    void m2(){ 
     System.out.println("Child : m2"); 
     m1(); 
    } 
} 

このコードでは、Parentクラスのm1()メソッドが呼び出されると、子のm2()メソッドであるm2()メソッドが呼び出され、StackOverflowErrorという結果になるためです。Javaで次の問題を解決するには?

親のm1()メソッドで、Childのm2()メソッドの代わりにParentのm2()メソッドを呼び出すように変更する必要があるのは何ですか?

+4

はこの宿題ですか? – Bernard

+2

誰かが私が働く場所にその種のコードを書いた場合、私は真剣に別の仕事を見つけることを検討します。私はそれが教育運動であることを心から願っています。 –

+1

私は生徒が実生活プロジェクトにそのようなコードを書かないことを願っています –

答えて

6

このような何か:

class Parent{ 

    void m1(){ 
     System.out.println("Parent : m1"); 
     m2impl(); 
    } 
    private void m2impl() { /* whatever */ } 

    void m2(){ 
     m2impl(); 
    } 
} 
+1

元のクラスからオーバーライドされたメソッドを呼び出す方法はないと思いますが、オーバーライドするクラスから呼び出すことは可能ですか? – bdares

+0

正しいですが、そのための構文はありません。 –

関連する問題