Java中的动态多态性如何应用于接口



我最近一直在阅读有关Java中的动态多态性(我是初学者)。根据我的理解,如果将父类类型的引用分配给了其孩子,如以下

辅助spoint涉及动态多态性。在链接中讨论的示例中,我了解员工类的对象用于访问一种薪金类的方法。在该示例中,员工摘要既不是摘要,也不是接口。(这意味着可以为父创建一个对象。

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

问题:如何将接口用作动态多态性的示例?

此外,在教程spoint中讨论的示例中,据说编译器在父类中查找方法,但JVM在运行期间调用了子类方法。

接口既没有方法定义,也不能实例化,那么
如何 List<Animal> animalPen = new LinkedList<>();用于动态多态性。

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

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

在此示例中,编译器通过查看其参考类型List来验证animalPen是否具有方法isEmptyList声明isEmpty的方法,因此,即使它未定义,该系统也可以确保animalPen通过该签名具有定义的方法。

这是因为非抽取类必须从其实现的所有接口中定义所有方法。这样可以确保接口的所有实例都是在其层次结构中的某个地方定义了接口的方法。

当对象中有不同的行为时,您使用接口进行多态性。假设您有一只鸭子,并且宣布了一个飞行的变量。在这种情况下,您认为要做的第一件事是一个名为FlyBehavior的类,以使该类型成为该类型的对象。现在,假设您有不同类型的鸭子,例如野鸭鸭,红发鸭,现在您有了橡皮鸭,它们都延伸了鸭级。您的橡皮鸭不会飞,因此对于橡皮鸭会不同。因此,您使FlyBehavior成为接口,并创建两个新类:ITFlies和Nofly,都实现了FlyBehavior接口。鸭中的构造函数将具有一个飞行的参数,当您创建一个新的Duck的新对象时,您需要填充,正如您所说,一个接口无法实例化,但是由于Itflies和nofly,都实现了Flybehavior界面,因此您可以使用这两个类(或任何实现FlyBehavior的类)填充FlyBehavior参数。这种面向对象的技术对于使您的程序在进行修改的情况下也更加独立和灵活也很有用。

最新更新