• JavaSE-10 多态


    学习要点

    • 多态的优势和应用场合
    • 父类和子类之间的类型转换
    • instanceof运算符的使用
    • 父类作为方法形参实现多态
    • 父类作为返回值实现多态

      

    使用多态的原因

    需求描述:

    在宠物管理系统中,宠物饿了,需要主人给他喂食,不同的宠物吃不一样的东西,并且健康值恢复情况也不一样。

    狗狗:吃狗粮,吃完后健康值增加3。

    企鹅:吃鱼,吃完后健康值增加5。

    问题分析:

    狗狗类:增加狗狗吃食的方法

    企鹅类:增加企鹅吃食的方法

    创建主人类:编写给狗狗喂食的方法,编写给企鹅喂食的方法

    编写测试方法:调用主人类给狗狗喂的方法,调用主人类给企鹅喂的方法

    编码实现

    public class Master {
    
           public void feed( Dog dog ) {
    
                  dog.eat();
    
           }
    
                 public void feed( Penguin pgn ) {
    
                   pgn.eat();
    
           }
    
                 public void feed( XXX xxx ) { //如果增加其他宠物…….
    
                   xxx.eat();
    
           }
    
    }       
    

      

     编码实现存在的问题

    1. 随着宠物的增多,代码需要不断修改,代码可扩展性太差。
    2. 主人喂食方法的参数都是Pet子类,是否可以采用feed(Pet pet)实现?
    3. 使用多态实现!

     

    多态

    生活中的多态

     

    都是打印机,但是不同类型的打印机,打印出的效果是不同的。

    同一事物,由于条件不同,产生的结果也是不同的。

    程序中的多态

    多态:同一个引用类型,使用不同的实例而执行不同操作。程序中使用父类定义引用,使用子类对象运行。

    feed(Pet pet);  //pet实际指向dog、penguin、cat等对象
    

      

    如何使用多态

    1. 编写父类
    2. 编写子类,子类重写父类方法
    3. 运行时,使用父类的类型,子类的对象(黄色部分为实现多态两个要素)
    向上转型:Pet pet = new Dog();// 自动类型转换
    

      

    实现多态的两种形式

    使用父类作为方法形参实现多态

    使用父类作为方法返回值实现多态

     

    上机练习

    使用多态实现宠物管理系统的喂食。

     

    增加猫,猫吃猫粮,健康值增加5。

    使用父类作为方法返回值实现多态//工厂模式

    使用多态实现宠物领养

    使用父类作为方法返回值

    实现思路

    在Master类添加领养方法getPet(String typeId )

    创建测试类,根据主人选择宠物类型编号来领养宠物。

     

      

    父类到子类的转换

    问题描述

    实现主人与宠物玩耍功能

    和狗狗玩接飞盘游戏,狗狗的健康值减少10,与主人亲密度增加5。

    和企鹅玩游泳游戏,企鹅的健康值减少10,与主人亲密度增加5。

    问题分析

    给Dog添加接飞盘方法catchingFlyDisc( )

    给Penguin添加游泳方法swimming( )

    给主人添加play(Pet pet)方法

    代码实现以及问题

     

    向下转型(强制类型转换)

     

    为了避免类型转换报错,使用instanceof运算符进行类型判断,判断的结果为布尔值类型。

    语法结构:

    对象  instanceof  类或接口

    使用场合:instanceof通常和强制类型转换结合使用。

     

    上机练习

    优化宠物管理系统,使用多态实现主人领养宠物并与宠物玩耍。

    1. 主人根据宠物编号领养宠物。
    2. 主人和狗狗玩接飞盘游戏,狗狗健康值减少10,与主人亲密度增加5。
    3. 主人和企鹅玩游泳游戏,企鹅健康值减少10,与主人亲密度增加5。

    总结

    多态可以减少类中代码量,可以提高代码的可扩展性和可维护性

    • 向上转型——子类转换为父类,自动进行类型转换
    • 向下转型——父类转换为子类,结合instanceof运算符进行强制类型转换

    实现多态的两种方式

    • 使用父类作为方法形参实现多态
    • 使用父类作为方法返回值实现多态


    本博客文章未经许可,禁止转载和商业用途!

    如有疑问,请联系: 2083967667@qq.com


  • 相关阅读:
    函数,封装
    c++增强c
    Git安装与使用
    Ajax&Jquery
    IntelliJ Idea2018.2,Pycharm20183.2破解教程
    事务&数据库连接池&DBUtils&JSP设计模式
    JSP&EL&JSTL
    Http协议和Servlet
    接收流信息---字符串
    lucene索引库优化一
  • 原文地址:https://www.cnblogs.com/rask/p/8253677.html
Copyright © 2020-2023  润新知