10. abstract class A {
11. abstract void al();
12. void a2() { }
13. }
14. class B extends A {
15. void a1() { }
16. void a2() { }
17. }
18. class C extends B { void c1() { } }
and:
A x = new B(); C y = new C(); A z = new C();
Which four are valid examples of polymorphic method calls? (Choose
four.)
A. x.a2();
B. z.a2();
C. z.c1();
D. z.a1();
E. y.c1();
F. x.a1();
Answer: ABDF谁帮我说说C选项为什么错了??

解决方案 »

  1.   

    因为c1是类C自己定义的方法,不是重写类A的方法,所以不是多态
      

  2.   

    z的类型是A,虽然他引用了构造的C类型的对象,但在方法区里可以执行的方法只有a1和a2.
    父类的公用方法子类可以直接使用,包括public限定的,默认限定的(只限同包中),procted(同包或相关子类),private(不可以使用)。
    而子类定义的方法一般父类不可以使用。这只是一般情形,如果想要使用,采用引用强制转换成子类类型就可以了。另外,可以使用的方法是字节码修正。
      

  3.   


    实例Y是C构造的类,C1是他自己的方法~~也没用多态。