Java的多态
操作符的多态
+可以作为算数运算,也可以作为字符串连接
类的多态
父类引用指向子类对象
示例 1 : 操作符的多态
同一个操作符在不同情境下,具备不同的作用
如果+号两侧都是整型,那么+代表 数字相加
如果+号两侧,任意一个是字符串,那么+代表字符串连接
package charactor; public class Hero { public String name; protected float hp; public static void main(String[] args) { int i = 5; int j = 6; int k = i+j; //如果+号两侧都是整型,那么+代表 数字相加 System.out.println(k); int a = 5; String b = "5"; String c = a+b; //如果+号两侧,任意一个是字符串,那么+代表字符串连接 System.out.println(c); } }
示例 2 : 观察类的多态现象
观察类的多态现象:
i1和i2都是Item类型
都调用effect方法
输出不同的结果
多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态
package property; 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.print("i1 是Item类型,执行effect打印:"); i1.effect(); System.out.print("i2也是Item类型,执行effect打印:"); i2.effect(); } } package property; public class LifePotion extends Item { public void effect(){ System.out.println("血瓶使用后,可以回血"); } } package property; public class MagicPotion extends Item{ public void effect(){ System.out.println("蓝瓶使用后,可以回魔法"); } }
示例 3 : 类的多态条件
要实现类的多态,需要如下条件
父类(接口)引用指向子类对象
调用的方法有重写
那么多态有什么作用呢? 通过比较不使用多态与使用多态来进一步了解
示例 4 : 类的多态-不使用多态
如果不使用多态,
假设英雄要使用血瓶和魔瓶,就需要为Hero设计两个方法
useLifePotion
useMagicPotion
除了血瓶和魔瓶还有很多种物品,那么就需要设计很多很多个方法,比如
usePurityPotion 净化药水
useGuard 守卫
useInvisiblePotion 使用隐形药水
等等等等
package charactor; import property.LifePotion; import property.MagicPotion; 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); } }
示例 5 : 类的多态-使用多态
如果物品的种类特别多,那么就需要设计很多的方法
比如useArmor,useWeapon等等
这个时候采用多态来解决这个问题
设计一个方法叫做useItem,其参数类型是Item
如果是使用血瓶,调用该方法
如果是使用魔瓶,还是调用该方法
无论英雄要使用什么样的物品,只需要一个方法即可
package charactor; import property.Item; import property.LifePotion; import property.MagicPotion; 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); } }
练习: Java的多态
设计一个接口
接口叫做Mortal,其中有一个方法叫做die实现接口
分别让ADHero,APHero,ADAPHero这三个类,实现Mortal接口,不同的类实现die方法的时候,都打印出不一样的字符串为Hero类,添加一个方法,在这个方法中调用 m的die方法。
public void kill(Mortal m)
在主方法中
首先实例化出一个Hero对象:盖伦
然后实例化出3个对象,分别是ADHero,APHero,ADAPHero的实例
然后让盖伦 kill 这3个对象
来源:博客园
作者:半米高峰
链接:https://www.cnblogs.com/jeddzd/p/11509839.html