如何在java中解决以下问题?

时间:2011-10-05 18:39:00

标签: java

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();
    }
}

此代码导致java.lang.StackOverflowError,因为当调用Parent类的m1()方法时,它调用m2()方法,这是child的m2()方法,因此导致StackOverflowError。

在Parents m1()方法中应该更改什么,以便它调用Parent的m2()方法而不是Child的m2()方法?

1 个答案:

答案 0 :(得分:6)

做这样的事情:

class Parent{

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

    void m2(){
        m2impl();
    }
}