java中的动态多态如何应用于接口?

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

我最近一直在阅读java中的动态多态性(我是初学者)。根据我的理解如果将父类类型的引用分配为对其子类的引用,如下所示

教程点它涉及到动态多态性。在链接中讨论的示例中,我了解员工类的对象用于访问工资类的(重写)方法。 在该示例中,员工既不是抽象的,也不是接口。 (这意味着可以为父对象创建一个对象)。

现在,根据此链接stackoverflow,我看到一个接口用于讨论动态多态性。

问题:如何以接口为例进行动态多态?

此外,在tutorialspoint中讨论的示例中,据说编译器在父类中查找方法,但JVM在运行时调用子类方法。

接口既没有方法定义,又不能实例化,怎么能

List<Animal> animalPen = new LinkedList<>();
用于动态多态性。

java interface polymorphism
3个回答
1
投票

实际上,解释并没有太大不同。

List animalPen = new LinkedList<>();
boolean empty = animalPen.isEmpty();

在此示例中,编译器通过查看其引用类型

animalPen
来验证
isEmpty
是否具有方法
List
List
声明了方法
isEmpty
,因此,即使它没有定义它,系统也可以保证
animalPen
具有通过该签名定义的方法。

这是因为非抽象类必须定义它实现的所有接口的所有方法。这确保了接口的所有实例都在其层次结构中的某个位置定义了接口的方法。


1
投票

当对象有不同的行为时,可以使用接口来实现多态性。假设您有一个 Duck 类,并且声明了一个 FlyBehavior 变量。在这种情况下,您首先想到要做的是创建一个名为 FlyBehavior 的类来创建该类型的对象。现在假设您有不同类型的鸭子,例如野鸭、红发鸭,现在您有橡胶鸭,所有这些都扩展了鸭子类。您的橡皮鸭不会飞,因此橡皮鸭的 FlyBehavior 会有所不同。因此,您将 FlyBehavior 设为一个接口并创建两个新类:ItFlies 和 NoFly,它们都实现了 FlyBehavior 接口。 Duck 中的构造函数会有一个 FlyBehavior 参数,当您创建 Duck 类型的新对象时需要填充该参数,正如您所说,接口无法实例化,但由于 ItFlies 和 NoFly 都实现了 FlyBehavior 接口,您可以使用这两个类(或任何实现 FlyBehavior 的类)填充 FlyBehavior 参数。这种面向对象的技术也有助于使您的程序在进行修改时更加独立和灵活。


0
投票

System.out.println("尝试programiz.pro");

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