zoukankan      html  css  js  c++  java
  • 接口与继承系列教材 (四)- 什么是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

  • 相关阅读:
    怎么认Destsoon标签条件
    PHP将图片转base64格式函数
    修改Discuz!X系列开启防CC攻击,不影响搜索引擎收录
    discuz x3.2简化的搜索框代码
    让Discuz! X3.2 SEO标题里的“-”支持空格
    javascript的常用操作(二)
    Spring MVC中注解的简介
    Spring MVC + Thymeleaf
    Maven建立spring-web项目
    Spring @Autowired使用介绍
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615547.html
Copyright © 2011-2022 走看看