关于动态绑定和静态绑定?
下面的代码,为什么第二个参数即便是Derived的对象调用的也是第二个参数是Base对象的方法?whichfoo实现的究竟是静态绑定还是动态绑定?
public class Test {
public static void main(String[] args) {
Base b=new Base();
Derived d=new Derived();
//测试传入不同参数时会调用哪个foo函数
whichFoo(b, b);//Base.Base
whichFoo(b, d);//Base.Base??
whichFoo(d, b);//Derived.Base
whichFoo(d, d);//Derived.Base??
}
public static void whichFoo(Base arg1,Base arg2){//static方法静态绑定???
arg1.foo(arg2);
}
class Base{
public void foo(Base x){
System.out.println("Base.Base");
}
public void foo(Derived x){
System.out.println("Base.Derived");
}
}
class Derived extends Base{
public void foo(Base x){
System.out.println("Derived.Base");
}
public void foo(Derived x){
System.out.println("Derived.Derived");
}
}
}
正在回答
你把Base中的foo(Base x){中增加boolean flag=x instanceof Derived;看一下结果。“whichFoo(b, d);//Base.Base?? ”其实那个x还是子类Derived。多态时的参数,与子类父类中的多态还是不一样的。祝:学习愉快
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7238 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星