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正确,原因是什么?
感谢
[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也算多态
C类都已经是最后辈的类了,它已经没有子类了,还怎么多态,
像A,B都有子类C,