为什么重写方法始终从子类的对象调用?

时间:2018-03-01 16:11:50

标签: java oop object override method-overriding

请您清楚一下为什么覆盖方法总是从子实例调用到其父类时调用的概念? 我写了一段代码来理解这个概念。 是否仅覆盖方法,发生在子类中?

class A {
        int x = 15;
        int marry(int a) {
            System.out.println("pppppp parent marry: " + a);
            return 0;
        }

        void show(int a) {
            System.out.println("pppppp parent show: " + a);
        }
    }

    class B extends A {

        int x = 10;
        void show(int a) {
            System.out.println("pppppp child show: " + a);
        }

        void wedding(int a) {
            System.out.println("pppppp child wedding: " + a);
        }
    }


 private void test() {
        A b = new B(); 
        b.show(10); //pppppp child show: 10
        b.marry(34);//pppppp parent marry: 34
        System.out.println("pppppp b.x: " + b.x);  //pppppp b.x: 15
        //////////////////////////////////////////////////////
        B a = (B)b; 
        a.show(22);  //pppppp child show: 22
        a.wedding(22); //pppppp child wedding: 22
        a.marry(22);//pppppp parent marry: 22
        System.out.println("pppppp a.x: " + a.x); //pppppp a.x: 10
        //////////////////////////////////////////////////////
    }

1 个答案:

答案 0 :(得分:2)

因为这是多态性的重点。方法按实例的类型调用,引用的类型调用类的实例。另外,请务必阅读java中的dynamic dispatch。此外,您的案例非常适合this article's内容。