我无法多态地访问具体类的方法



我有一个接口 myinterface 带有两种方法 dosomething ()和 dosomethingelse ()P>

我有一个抽象的公共类 a 实现此接口。我有一个 c 的类,该类别扩展了类 a ,因此也实现了接口的方法。在主方法上,我将C类的对象分配给myinterface引用,例如:myinterface myiface = new C();

问题是,如果我在类(摘要或具体)中添加一些方法,则无法通过参考myiface调用该方法。我必须先击败它。我不应该像 java se8中显示的deitel 程序员(第10章多态性和界面)中所示的多态访问该类?

这样想到它...想象您的myinterface被命名为'Animal',您有两个类实现它,命名为'Dog'和'Cow'。仅仅因为它们是两种动物,您就不会指望狗突然给牛奶喂牛奶,对吗?在此类比中,givemilk()是一种仅由牛类实施的方法。

您明白了吗?

我不应该能够多态访问该类...

您可以 - 如果您的变量类型为C类型。但事实并非如此,它是MyInterface类型的,它完全定义了您可以访问的实例的功能。是的,实例具有更多功能,但是写在接口上的代码不知道。

C中添加功能与多态性无关。在这种情况下,多态性(有几种不同的类型)是AC可以以不同的方式实现MyInterface的功能 ,但是您的代码通过 MyInterface参考均不知道。也不关心这些实例为 A s或 C s;它只知道应该知道的只是他们声称是忠实的MyInterface实施。

让我们以一个具体示例:

public void doSomethingWith(List list) {
    // ...
}

当某物调用doSomethingWith时,它会在满足List接口的实例中传递。那是所有该方法知道该实例(不存在诸如instanceofgetClass之类的事物)。该实例可以是ArrayListLinkedList,A Stack等。但是使用它的代码不知道或关心这一点。它所知道的是它是List。即使通过ArrayList传递该方法,它也无法使用(SAS)ensureCapacity,而不会先降低引用(如果实例不是ArrayList),因为并非所有List实现都有ensureCapacity

<。 <。/div>

相关内容

  • 没有找到相关文章

最新更新