操作符的多态
+ 可以作为算数运算,也可以作为字符串连接
类的多态
父类引用指向子类对象
步骤1:操作符的多态
步骤2:观察类的多态现象
步骤3:类的多态条件
步骤4:类的多态-不使用多态
步骤5:类的多态-使用多态
步骤6:练习-多态
步骤7:答案-多态
示例 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 : 观察类的多态现象
观察类的多态现象:
1. i1和i2都是Item类型
2. 都调用effect方法
3. 输出不同的结果
多态: 都是同一个类型,调用同一个方法,却能呈现不同的状态
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 : 类的多态条件
要实现类的多态,需要如下条件
1. 父类(接口)引用指向子类对象
2. 调用的方法有重写
那么多态有什么作用呢? 通过比较不使用多态与使用多态来进一步了解
示例 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);
}
}
|
更多内容,点击了解: https://how2j.cn/k/interface-inheritance/interface-inheritance-polymorphic/315.html