• 大数据之Java基础(6)



    前言

    #博学谷IT学习技术支持#
    本周主要学习了Java的多态,内部类和Lambda;
    封装,继承和多态是Java的三大特性,多态是在继承的基础上实现的,存在多态就一定有继承,一种事物的不同形态就是多态;
    类中再次定义的类称为内部类,内部类分为局部内部类和匿名内部类两种;
    Lambda表达式是函数式编程思想,与匿名内部类有着一定联系。


    一、多态

    (一)多态的前提条件

    实现多态有3个条件,存在继承关系,重写父类方法以及父类引用指向子类对象,下图就是一种形式的多态,定义好父类引用后,即可调用子类中的方法,并执行子类方法中的代码逻辑。
    在这里插入图片描述

    运行结果:
    在这里插入图片描述

    (二)多态的成员访问特点

    多态的成员特点主要从构造方法,成员变量和成员方法讲起:

    1. 构造方法:跟继承一样,通过super方法父类的构造方法;
    2. 成员变量:编译看左边,执行看左边,该说法可以使用父类引用指向子类对象来说明,若想调用父类中的成员变量,父类需要存在该变量,若子类和父类中同时存在相同名称的成员变量,则以父类中的成员变量值为准
      在这里插入图片描述
      执行结果:
      在这里插入图片描述
    3. 成员方法:编译看左边,执行看右边,成员方法执行的逻辑与成员变量不同,成员方法执行子类中的代码,为了方便看出差别,在父类和子类中分别定义了两个相同名称的成员方法,从代码的执行结果就能说明其逻辑:
      在这里插入图片描述
      执行结果:
      在这里插入图片描述
      说明:成员变量和成员方法执行逻辑不同的原因是:成员方法存在重写,而成员变量没有,所以成员方法执行子类中方法的逻辑,成员变量以父类为准。

    (三)多态好处与弊端

    没有一个事物是十全十美的,多态也不例外,使用多态的好处是可以提高代码扩展性,而弊端是无法调用子类中特有的方法,一旦调用子类特有的方法,编译时就会出现错误:
    在这里插入图片描述

    (四)向上转型、向下转型以及转型的风险

    1. 向上转型:子类到父类的过程,父类引用指向子类对象,上述所讲的多态的知识点就是向上转型的例子;
      在这里插入图片描述
    2. 向下转型:父类到子类的过程,向下转型可以解决无法调用子类特有方法的问题,需要注意的是该转型方式需要使用强制转换,父类强转成子类;
      在这里插入图片描述
      运行结果:
      在这里插入图片描述
    3. 转型的风险
      多态经常使用的用法是在成员方法的形参中定义父类引用,传递的实参是父类的子类对象,向下转型时,若只想调用某个子类中特有的方法,需要使用关键子instanceof判断,返回结果为Boolean,如果是指定的类,才执行相对应的逻辑,否则可能出现ClassCastException的异常。
      在这里插入图片描述
      执行结果为:
      在这里插入图片描述

    二、内部类

    (一)介绍

    定义在类中的类成为内部类,下图中的类In就是内部类:
    在这里插入图片描述
    定义内部类的格式为:外部类.内部类 对象名= new 外部类().new 内部类()
    在这里插入图片描述
    定义好内部类对象并调用Print方法的执行结果为:
    在这里插入图片描述

    (二)局部内部类和匿名内部类

    1. 局部内部类:定义在类成员方法中的类称为局部内部类,只能在方法中创建对象才能调用,外部无法访问,需要注意的是创建局部内部类对象之前需要先创建局部内部类,否则将无法创建局部内部类对象。
      在这里插入图片描述
      执行结果:
      在这里插入图片描述
    2. 匿名内部类:
      匿名内部类是特殊的局部内部类,定义匿名内部类的前提是需要存在一个类或接口,其较为突出的特点是使用匿名内部类不存在类名,需要注意的是类或接口需要定义在匿名内部类之前。
      在这里插入图片描述
      执行结果:
      在这里插入图片描述

    总结

    多态不仅可以提高代码的可扩展性,还能简化代码,但在向下转型时需要特别注意是否存在转换类型与目标类型不同的情况,防止出现ClassCastException异常;匿名内部类本质是将继承/实现,方法重写和创建对象放在一行执行,也算是另一种方式的代码优化。

  • 相关阅读:
    【LLM大模型】大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼
    Java数据库连接-JDBC
    应用聚类算法,预测中国足球在亚洲处于什么水平
    SQL中的数据类型和规范化,助力数据存储优化
    μC/OS-II---消息邮箱管理1(os_mbox.c)
    使用jxls excel模板填充生成Excel,多sheet页处理
    搭建react项目
    数据库的索引简述
    Certificate verification failed: The certificate is NOT trusted
    git实现服务器自动push拉取代码--webhooks
  • 原文地址:https://blog.csdn.net/weixin_43339889/article/details/125464494