接口与继承系列教材 (四)- 什么是Java的多态?

操作符的多态 
+ 可以作为算数运算,也可以作为字符串连接 

类的多态 
父类引用指向子类对象

步骤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

发布了79 篇原创文章 · 获赞 15 · 访问量 6384

猜你喜欢

转载自blog.csdn.net/qq_31634777/article/details/104789734
今日推荐