一、解释
多态就是同一个接口,使用不同的实例而执行不同操作
二、必要条件
Java实现多态有 3 个必要条件:继承、重写和向上转型
三、代码比较
Item.java
public class Item {
String name;
int price;
public void buy(){
System.out.println("购买");
}
public void effect(){
System.out.println("物品使用后,可以有效果");
}
public static void main(String[] args){
Item i1 = new LifePotion(); // 向上转型
Item i2 = new MagicPotion(); //向上转型
System.out.println("i1 是Item类型,执行effect打印:");
i1.effect();
System.out.println("i2 也是Item类型,执行effect打印:");
i2.effect();
}
}
class LifePotion extends Item{
public void effect(){
System.out.println("血瓶使用后,可以回血");
}
}
class MagicPotion extends Item{
public void effect(){
System.out.println("蓝瓶使用后,可以回魔法");
}
}
Hero.java
使用多态
public class Hero{
public String name;
protected float hp;
public void useItem(Item i){
i.effect();
}
public static void main(String[] args){
Hero garen = new Hero();
garen.name = "盖伦";
LifePotion lp = new LifePotion();
MagicPotion mp = new MagicPotion();
garen.useItem(lp);
garen.useItem(mp);
}
}
不使用多态
public class Hero {
public String name;
protected float hp;
public void useLifePotion(LifePotion lp){
lp.effect();
}
public void useMagicPotion(MagicPotion mp){
mp.effect();
}
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
LifePotion lp =new LifePotion();
MagicPotion mp =new MagicPotion();
garen.useLifePotion(lp);
garen.useMagicPotion(mp);
}
}
结论:无多态的话,有几种药瓶英雄类就要写几种方法;有多态就是调用其他类会比较方便。