首页 > 试题广场 >

假定Base b = new De...

[单选题]
假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?
public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}

public void methodTwo()
{
System.out.print("B");
}
}

public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}

public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}
  • ABDC
  • AB
  • ABCD
  • ABC
程序开始执行,Base b = new Derived();new了一个子类
调用执行b.methodOne()后,
第一步:因为子类重写了methodOne()方法,故调用的方法是子类的methodOne()方法
第二步:进入methodOne()方法后,执行super.methodOne();调用父类methodOne()方法  输出:A
第三步:继续执行父类methodOne()方法中的methodTwo()方法
第四步:因为子类重写了methodOne()方法调用的方法是子类的methodTwo()方法
第五步:调用子类methodTwo()方法,执行super.methodTwo();回到父类methodTwo()方法中  输出B
第六步:输出B后,执行子类methodTwo()中的System.out.print("D");  输出D
第七步:回到子类methodOne(),继续往下执行,System.out.print("C");   输出C


所以结果为:ABDC
发表于 2019-08-28 19:47:44 回复(5)
如果new的是子类的对象
没有显式调用父类方法的话
如果子类重写了父类的方法则执行子类的方法
如果用super显式调用父类的方法则执行父类的方法

发表于 2019-08-21 13:41:40 回复(2)

super.methodOne(); 调用父类的methodOne,其中methodOne方法里又调用了methodTwo();
因为Derived有 重写了methodTwo()
且开始是由super调用的
所以先调用父类的methodTwo()最终调其子类的methodTwo();  即打印出BD。
发表于 2019-08-24 21:44:34 回复(0)
子类重写的方法优先执行
发表于 2019-10-12 22:48:50 回复(0)
子类two中,第一行根据super到达-》父类one,其中调用了methodtwo,即便这是在父类里,methodtwo依然指向子类,于是跳转到-》子类two,内部有super.methodtwo,所以跳到-》父类two,之后顺序执行....
发表于 2019-09-29 22:57:04 回复(0)
这里主要考的有两个知识点:①类的继承中的重写概念;②super关键字;
所以,如果子类重写了父类中的方法,在调用子类对象的methodOne()方法时,只会调用子类重写的该方法,并不会调用父类的methodOne()方法。但是这里使用了supe关键字去调用父类的成员方法,所以会调用调用父类的methodOne()方法和methodTwo()方法。


(如是理解得不对,还请多多指教)

发表于 2019-08-28 21:05:04 回复(0)
发表于 2019-08-28 11:04:16 回复(0)

super关键字调用父类的方法

发表于 2019-10-18 00:00:58 回复(0)
一环套一环 仔细看清楚就ok
发表于 2019-09-25 17:33:09 回复(0)