Fin*_*_tv 0 java oop polymorphism dynamic
我正在研究我的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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
动态多态性强大的最简单的例子是集合.我们可以一起收集不同类的对象,并且只要它们共享一个父接口,就可以使用它们.例如:
List<SuperHero> avengers = new ArrayList<>();
avengers.add(new Spiderman());
avengers.add(new Wolverine());
System.out.println("Avengers Assemble!");
for(SuperHero hero : avengers){
hero.useSuperPower();
}
Run Code Online (Sandbox Code Playgroud)
它还允许API非常灵活.我们可以创建期望一个接口的方法,但稍后将它们传递给子类型的对象,而不必重新创建该方法.例如:
public void usePower(SuperHero hero){
hero.useSuperPower();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们可以使用扩展SuperHero的对象来调用此方法.(这个例子有点蹩脚,因为我们可以直接调用该useSuperPower()方法,但希望你明白这一点.)
基本上,多态性允许我们创建所有做同样事情的类,但做不同的事情,然后(几乎)可互换地使用它们.