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

时间:2018-05-07 23:37:46

标签: java polymorphism

为什么要运行

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 个答案:

答案 0 :(得分:1)

使用

((Mary) var3).method3();

它会正常工作。

答案 1 :(得分:0)

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