解决可能的重复项:我知道接口是什么。我知道如何实施它们以及所有这些。我知道什么是多态性,它允许用子类型替换对象。我知道什么是抽象方法,我没有问这些东西是什么。相反,我在问以下问题中无能为力的意义是什么。现在问题来了:
我有一个界面。让我们称之为Foo。它具有以下抽象方法:
http://openproject.example.net
我还有一个实现Foo的Bar类。它具有isNumeric方法,实现方式如下:
public boolean isNumeric(Object o);
我怎么不能使抽象参数多态化? 我不能更具体地实现的目的是什么? ...这不属于我的一部分吗?多态性的必要性。可以“下课”上一堂课,并且可以针对特定情况做更具体的事情……似乎我也不能倒退;在接口中将参数声明为DataPoint并将其实现为Object。
为什么不能这样做? 我真的必须强制转换然后在文档中说吗?“它必须是DataPoint”吗? 在这种情况下,我不能仅仅强制将其作为数据点,而在另一种实现中,还需要其他东西吗?如果必须强制转换,则必须处理类强制转换异常并还要对文档进行处理定义该参数的说明不使用“此参数” ...如果可以的话。似乎比面向对象编程的全部工作还多...
-谢谢
PS问题被加粗。
答案 0 :(得分:3)
如果Bar
的{{1}}打算覆盖isNumeric()
的{{1}}方法,则对于任何Foo
实例,其isNumeric()
将用于服务任何Bar
呼叫。这就是多态性的基础。
现在想象有人打电话:
isNumeric()
那是绝对有效的Java代码。但是您的isNumeric()
将无法处理。
这就是为什么如果您在子类中更改为更特定的类型,则无法覆盖方法。您必须保留参数类型。