2017-03-15 99 views
1

我正在接受AP Comp Sci,我们正在学习多态和继承。我们的老师给我们提出了以下问题:带接口的Java多态性

如果类C1和C2都实现了一个接口Cint,它有一个方法“whichIsIt”,并且如果C1 c = new C1();在程序的一个点执行,然后执行一个稍后的指令c.whichIsIt();将调用C1中定义的whichIsIt方法。

据说答案是false。但是,这对我来说没有意义。多态性的要点是它使用动态绑定,并将使用层次结构中最低类中定义的方法。这个问题的答案如何是错误的?

回答

2

Java对于重载方法的最终和重载方法以及后期绑定有早期绑定。所以除非whichIsIt方法是最终的或超载的,否则答案应该是真实的。在java8接口之前也不允许有方法实现。

Cint c = new C1(); 
c.whichIsIt() //Assuming C1 overrides whichIsIt method defined in Cint, 
       //then this will call C1.whichIsIt method 
+0

只是为了澄清,如果该方法被覆盖,它将使用在类层次结构中声明为较低的方法? –

+0

编辑答案澄清。 –

+0

谢谢。这个问题似乎应该澄清,如果该方法被覆盖或不。我赞赏关于这个主题的澄清。 –