【问题标题】:How to solve the following issue in java?如何在java中解决以下问题?
【发布时间】:2011-12-01 17:39:00
【问题描述】:
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() 方法,因此会导致 StackOverflowError。

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

【问题讨论】:

  • 如果有人在我工作的地方编写这种代码,我会认真考虑另找一份工作。我真诚地希望这是一种教育练习。
  • 希望同学们不要在实际项目中写出这样的代码
  • 跟作业没关系。 :)。我刚遇到这个问题,无法找到调用覆盖方法的解决方案。而且我认为这种问题永远不会出现在实际场景中。
  • 我仍然不相信这段代码不能从头开始重写 - 支持组合而不是继承..支持组合而不是继承..支持组合而不是继承

标签: java


【解决方案1】:

做这样的事情:

class Parent{

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

    void m2(){
        m2impl();
    }
}

【讨论】:

  • 我猜你是说没有办法从原始类调用重写的方法,尽管可以从重写类调用它?
  • 正确,没有语法。
猜你喜欢
  • 2014-05-03
  • 2021-03-04
  • 1970-01-01
  • 2021-08-19
  • 2023-01-23
  • 1970-01-01
  • 2021-01-22
  • 2018-05-06
  • 2019-06-16
相关资源
最近更新 更多