首页 > 其他 > 详细

在多态的情况下,在父类的构造器中运行子类的重写方法问题

时间:2021-06-02 21:35:10      阅读:23      评论:0      收藏:0      [点我收藏+]

问题:

在测试类中创建一个多态 Base b2 = new Sub();

结果在父类的构造器方法中调用的method重写方法,调用的却是子类的,这是为什么?

看以下代码:

public class Test01 {
    public static void main(String[] args) {
        /*
        1.new 的是父类对象,走父类构造
        直接调用了父类的method
        输出 base:100
        */
        Base b1 = new Base();
        /*
        2.多态new对象  new了子类对象 执行子类无参时先走父类无参构造
        此时父类中无参构造调用的method为重写后的method,然后传了一个100
        所以先输出 sub:100

        然后再执行super.method(70)调用父类method,并传递70
        所以输出 base:70
        */
        Base b2 = new Sub();
        System.out.println(b2.getClass());
    }
}
public class Sub extends Base{
    Sub() {super.method(70);
    }

    public void method(int j) {
        System.out.println("sub : " + j);
    }
}
public class Base {
    Base() {
        method(100);
    }

    public void method(int i) {
        System.out.println("base : " + i);
    }
}

以上方法执行的顺序是:

1、base : 100
2、sub : 100
3、base : 70
4、class Sub

在父类的构造器中跳转的方法是子类的是因为,new的运行类型是Sub(),所以执行的方法就是Sub类中的方法。

多态运行的方法只和=左边的运行类型有关,

执行的方法只能是在子类的方法,如果子类没有才会去父类中寻找

并且调用不了父类中的 private属性变量和方法

在多态的情况下,在父类的构造器中运行子类的重写方法问题

原文:https://www.cnblogs.com/MoonASixpence/p/14842604.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!