java - java中出现以下问题如何解决?

标签 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() 方法,而 m2() 方法是子类的 m2() 方法,因此会导致 StackOverflowError。

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

最佳答案

做这样的事情:

class Parent{

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

    void m2(){
        m2impl();
    }
}

关于java - java中出现以下问题如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666026/

相关文章:

java - 找不到 com.mongodb.ServerAddress 的类文件

java - 为什么/何时不想在 JVM 中启用 Java 8 UseStringDeduplication?

java - JFrame 找不到 'pack' 方法

java - 无法选择隐藏链接 - selenium

java - 测试 AJAX 文件上传

java - 如何在 Spring Boot 中存储一个 xml 节点的多个值?

java - 非守护线程输出有时会消失,直到使用 join()

java - 如何在不使用存储阵列的情况下将 2D 阵列旋转 90 度?

java - 在 Spring 安全中如何初始化用户 -(org.springframework.security.core.userdetails.User)

java - 持续读取附加到日志文件的行