代码之家  ›  专栏  ›  技术社区  ›  James Nguyen

Java多态性:为什么返回错误?

  •  1
  • James Nguyen  · 技术社区  · 6 年前

    为什么跑步

    Larry var3 = new Jerry();
    var3.method3();
    

    输出错误,而不是

    拉里1

    哈里1

    玛丽3

    我认为这可能与对象的创建方式有关。但这只是我的猜测。

    代码如下:

    public class Harry {
        public void method1() {
            System.out.println("harry 1");
        }
    
        public void method2() {
            method1();
            System.out.println("harry 2");
        }
    }
    
    public class Larry extends Harry {
        public void method1() {
            System.out.println("larry 1");
            super.method1();
        }
    }
    
    public class Mary extends Larry {
        public void method2() {
            System.out.println("mary 2");
        }
    
        public void method3() {
            super.method1();
            System.out.println("mary 3");
        }
    }
    
    public class Jerry extends Mary {
        public void method2() {
            super.method2();
            System.out.println("jerry 2");
        }
    }
    
    2 回复  |  直到 4 年前
        1
  •  1
  •   foxx1337    6 年前

    使用

    ((Mary) var3).method3();
    

    它会很好地工作。

        2
  •  0
  •   crimaniak    6 年前
    Larry var3 = new Jerry(); // casting Jerry to Larry. 
    var3.method3(); // there is no Larry.method3 method.
    // You need downcast object to derived class with method3() defined to call it