发布网友 发布时间: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实例