我正在研究Java编程和面向对象的编程。我一直迷恋上动态多态性的好处是什么?

在下面查看我的示例程序。
为什么在示例2中使用示例1?

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();
    }
}

最佳答案

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

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非常灵活。我们可以创建需要一个接口的方法,但是稍后将它们传递给一个子类型的对象,而无需重新创建该方法。例如:

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


在这里,我们可以使用扩展SuperHero的对象调用此方法。 (该示例有点la脚,因为我们可以直接调用useSuperPower()方法,但希望您能理解这一点。)

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

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

10-09 07:40