求这段Java代码的编译顺序

发布网友 发布时间:2022-04-22 10:00

我来回答

2个回答

热心网友 时间:2023-10-09 18:31

不知楼主对继承和多态这部分的理解是否透彻,建议再好好去看看

解答:
这道题用到了多态。
static void bogo(Base b)这个函数的参数是Base类型,而在主函数调用时却传入了一个Base的子类Extension类对象,即把Extension类对象上转类型,属于多态。
首先,主函数中调用bogo(new Extension()),于是JVM创建了一个Extension类对象。但由于Extension类继承于Base类,于是会最先调用Base(){add(1);}。

前面说有,由于是多态,在Base(){add(1);}里,是调用Extension类中的add()函数,于是调用void add(int v){i+=v*2;},这时i=2。

接着才调用Extension(){add(2);},其中的add(2)还是调用调用void add(int v){i+=v*2;},这时i=6。

这时类对象的构建完成,开始调用
static void bogo(Base b)
{
b.add(8);
b.print();
}
由于主函数中传入的参数是Extension类
于是调用Extension类中的
void add(int v){i+=v*2;}
这时i=22.
最后调用没有被Extension类覆盖的void print(){System.out.println(i);}}。
输出22.

热心网友 时间:2023-10-09 18:31

从主函数开始,执行bogo()方法,执行此方法时要新建Base实例

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com