java - Java中的动态多态性有什么好处?

标签 java oop dynamic polymorphism

我正在学习 Java 编程和面向对象编程。我一直想知道动态多态性有什么好处?

看看下面我的示例程序。 为什么我要使用示例 1 而不是示例 2?

class SuperHero {
    private String power = ("Generic Power");
    public void useSuperPower() {
        System.out.println(power);
    }
}
class Spiderman extends SuperHero {
    private String power = ("Web sling!");
    public void useSuperPower() {
       System.out.println(power);
   }
}

class Wolverine extends SuperHero {
    private String power = ("Hack and Slash!");
    public void useSuperPower() {
        System.out.println(power);
    }
}

class main {
    public static void main (String args[]) {
        //example 1
        SuperHero hero = new SuperHero();
        SuperHero hero1 = new Spiderman();
        SuperHero hero2 = new Wolverine();

        hero.useSuperPower();
        hero1.useSuperPower();
        hero2.useSuperPower();


        //example 2
        Spiderman test = new Spiderman();
        Wolverine test2 = new Wolverine();

        test.useSuperPower();
        test2.useSuperPower();
    }
}

最佳答案

动态多态性强大的最简单的例子就是在集合中。我们可以将不同类的对象收集在一起,并以相同的方式使用它们,只要它们都共享一个父接口(interface)即可。例如:

List<SuperHero> avengers = new ArrayList<>();
avengers.add(new Spiderman());
avengers.add(new Wolverine());

System.out.println("Avengers Assemble!");
for(SuperHero hero : avengers){
    hero.useSuperPower();
}

它还使 API 变得非常灵活。我们可以创建需要一个接口(interface)的方法,但稍后向它们传递一个子类型的对象,而不必重新创建该方法。例如:

public void usePower(SuperHero hero){
    hero.useSuperPower();
}

在这里,我们可以使用扩展 SuperHero 的对象来调用此方法。 (这个例子有点蹩脚,因为我们可以直接调用 useSuperPower() 方法,但希望您明白这一点。)

基本上,多态性允许我们创建所有做相同事情但以不同方式做事的类,然后(几乎)互换使用它们。

关于java - Java中的动态多态性有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41496803/

相关文章:

java - BroadcastReceiver 只监听变化吗?

java - Sql Server Reporting Service 2010 with JAVA ee 应用程序

r - Tidyverse 和 R : how to count rows in a tibble of a nested dataframe

java - 无法转换为子类

java - 测试集合的顺序

delphi - 抽象与接口(interface) - 在 Delphi 中分离定义和实现

c# - Json.Net 无法从动态对象反序列化为 nullable<short>

C# 将 DynamicObject 转换为任意类型

javascript - Sweet Alert 2 中的 Vue.js 动态 HTML 和 Vue 指令

java - 消息( toast )未显示