东东车 2010-01-15 18:57
浏览 234
已采纳

scjp中的一道习题,帮忙分析一下

Question 18
Given:
10. interface A { public int getValue() }
11. class B implements A {
12. public int getValue() { return 1; }
13. }
14. class C extends B {
15. // insert code here
16. }
Which three code fragments, inserted individually at line 15, make use
of polymorphism? (Choose three.)
A. public void add(C c) { c.getValue(); }
B. public void add(B b) { b.getValue(); }
C. public void add(A a) { a.getValue(); }
D. public void add(A a, B b) { a.getValue(); }
E. public void add(C c1, C c2) { c1.getValue(); }

帮忙分析一下

b、c、d分别用多态的哪些特性??

A 不正确,不正确的原因
B,C,D正确,原因是什么?
感谢

  • 写回答

2条回答 默认 最新

  • wocsok 2010-01-15 20:48
    关注

    [code="java"]public void add(C c) { c.getValue(); } [/code]
    是不是多态看里面的参数,面向对象的思维让我面对接口编程,很明显C是B的子类,这add()直接用的C,这样如果换成别的A的实现类,是换不了的
    [code="java"]B. public void add(B b) { b.getValue(); }
    C. public void add(A a) { a.getValue(); } [/code]
    B和C是一样的,因为B方法里,可以放任何B的子类,C的方法里,可以放任何A的实现类(当然也包含B的子类)[code="java"]D. public void add(A a, B b) { a.getValue(); }
    [/code]
    D和B.C的解释一样,两个参数,一个可以放任何A的实现类,一个可以放B的子类。
    说这个是不是多态,是,但是建议平时多对接口编程,也就是我建议参数都是A类型的

    [code="java"]E. public void add(C c1, C c2) { c1.getValue(); } [/code]
    E里面两个参数都没有子类了,所以就不是多态了。
    这样做的坏处是,方法参数只能放C,放别的不行,但是如果C还有子类,那么E也算多态

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算