接口和参数多态[重复]

问题描述 投票:0回答:1

为了解决可能的重复问题:我知道接口是什么。我知道如何实现它们以及所有这些。我知道什么是多态,它允许用子类型替换对象。我知道抽象的方法是什么,我不知道这些是什么。相反,我问的是,在下面的问题中无法做到这一点的重点是什么。现在问题:

我有一个界面。我们称之为Foo。它有以下抽象方法:

public boolean isNumeric(Object o);

我还有一个实现Foo的类Bar。它具有如下实现的isNumeric方法:

public boolean isNumeric(DataPoint dp){

    //some stuff

    return true;
}

为什么我不能变形抽象参数呢?实现的重点是什么我不能更具体?...这不是多态性必要性的一部分。允许“下”一个班级并且能够更具体地针对特定情况......似乎我也不能倒退;将接口中的参数声明为DataPoint并将其实现为Object。

为什么我不能这样做?我是否真的必须施展它然后在Doc中说? “它必须是一个DataPoint”bla bla bla?在这种情况下,我不能强迫它成为一个数据点,而在另一个实现中是另外的呢?如果我必须进行强制转换,我将不得不处理类强制转换异常,并且还会对定义参数的文档进行反击,该文档的解释说明不使用“this parameter”...如果这样做有意义的话。这似乎比面向对象编程的整个点更有用......

-谢谢

PS的问题很大胆。

java interface polymorphism abstract
1个回答
3
投票

如果BarisNumeric()意图覆盖FooisNumeric()方法,那么对于任何Bar实例,其isNumeric()将用于任何isNumeric()呼叫。这是多态性的基础。

现在想象有人打电话:

    Foo instance = new Bar();
    System.out.println(instance.isNumeric("Hello");

这是绝对有效的Java代码。但是你的Bar.isNumeric(DataPoint)将无法解决这个问题。

这就是为什么如果更改为子类中更具体的类型,则无法覆盖方法。您必须保留参数类型。

© www.soinside.com 2019 - 2024. All rights reserved.