代码之家  ›  专栏  ›  技术社区  ›  Hamza Belmellouki

强制转换到超类时出现stackoverflow错误

  •  1
  • Hamza Belmellouki  · 技术社区  · 5 年前

    我在网上找到了以下代码。

     class A {
            public void perform_work() {
                System.out.println("A");
            }
        }
    class B extends A {
        public void perform_work() {
            System.out.println("B");
        }
    }
    
    class C extends B {
        public void perform_work() {
            ((A) this).perform_work(); // Line 163
        }
    
        public static void main(String[] args) {
            C c = new C();
            c.perform_work();
        }
    }
    

    这段代码编译得很干净,但在运行时出错:

    Exception in thread "main" java.lang.StackOverflowError
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
        at com.hamzablm.C.perform_work(Main.java:163)
    

    ……………………………………………像那样的错误更多

    我希望第163行(在上面的代码中指定)可以调用 perfom_work() 在类A中定义。为什么生成此错误?如何解决?

    3 回复  |  直到 5 年前
        1
  •  8
  •   lealceldeiro VonC    5 年前

    perfom_work C A

    public void perform_work() {
        super.perform_work();
    }
    

    B

        2
  •  1
  •   Joakim Danielson    5 年前

    C perform_work this A StackOverflowError

    super

        3
  •  1
  •   DudeDoesThings    5 年前

    public void perform_work() {
        A someA = this;
        someA.perform_work();
    }
    

    public static void perform_more_work(A someA) {
        someA.perform_work();
    }
    
    public void perform_work() {
        perform_more_work(this);
    }