分享

一道多态性的题,实在理解不了了~~~~

 ShangShujie 2006-11-19
写出以下代码的输出结果
class A{
 public String f(D obj){return ("A and D");}
 public String f(A obj){return ("A and A");}
}
class B extends A{
 public String f(B obj){return ("B and B");}
 public String f(A obj){return ("B and A");}
}
class C extends B{}
class D extends B{}
class test{
 A a1 = new A();
 A a2 = new B();
 B b = new B();
 C c = new C();
 D d = new D();
 System.out.println(a1.f(b));   A and A
 System.out.println(a1.f(c));   A and A
 System.out.println(a1.f(d));   A and D
 System.out.println(a2.f(b));   B and A
 System.out.println(a2.f(c));   B and A
 System.out.println(a2.f(d));   A and D
 System.out.println(b.f(b));    B and B
 System.out.println(b.f(c));    B and B
 System.out.println(b.f(d));   A and D
}
旁边的是标准答案,前三个都很好理解,但是后面三个真的是一头雾水啊,难道b,c都变成类A了?还有d,是不是如果子类里没有他的方法可调用,就看超类里是否有与他相对应的方法?
然后最后一个,b不是已经声明为B类了吗?为什么会调用A类里的方法呢?为什么结果不能是B and B呢?
大家能帮忙给小弟解解惑吗?真是一头雾水啊!~~~~~~~~~~~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多