面向对象进阶3

文章介绍了Java中的多态概念,包括其形式、优势、类型转换以及在实际编程中的应用。同时,详细讲解了内部类的不同类型,如静态内部类、成员内部类、局部内部类和匿名内部类,强调它们的作用和使用场景。此外,还讨论了Object类的重要方法如toString和equals,以及StringBuilder、Math和BigDecimal等常用API的用途。
摘要由CSDN通过智能技术生成

一、面向对象三大特征之三:多态

1. 多态的概述,多态的形式
什么是多态?

  • 同类型的对象,执行同一个行为,会表现出不同的行为特征

多态的常见形式

父类类型 对象名称 = new 子类构造器;
接口 对象名称 = new 实现类构造器;

多态中成员访问特点

  • 方法调用:编译看左边,运行看右边
  • 变量调用:编译看左边,运行也看左边(多态侧重行为多态

多态的前提:

  • 有继承/实现关系;有父类引用指向子类对象;有方法重写

2.多态的优势

  • 在多态形式下,右边对象可以实现解耦合,便于扩展和维护
Animal a = new Tortoise();
a.run(); //后续业务行为随对象而变,后续代码无需修改
  • 定义方法时,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性和便利。

多态会产生一个问题:多态下不能使用子类的独有功能

3.多态下引用数据类型的类型转换
自动类型转换(从子到父):子类对象赋值给父类类型的变量指向。
强制类型转换(从父到子):

  • 此时必须进行强制类型转换:子类 对象变量 = (子类)父类类型的变量
  • 作用:可以解决多态下的劣势,可以实现调用子类独有的功能。
  • 注意:如果转型后的类型和对象真实类型不是同一种类型,那么在转换时会出现ClassCastException
    Java建议强转前使用instanceof判断当前对象的真实类型,再强转。

4.多态的综合案例

二、内部类

1. 内部类概述

  • 内部类是定义在一个类里面的类,里面的类可以理解为(寄生),外部类可以理解为(宿主)
  • 内部类的使用场景、作用:
    当一个事务的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计
    内部类通常可以方便访问外部类的成员,包括私有成员
    内部类提供了更好的封装性,内部类本身就可以用private protected 等修饰,封装性可以做更多控制。
  • 内部类的分类:
    静态内部类、成员内部类、局部内部类、匿名内部类

2. 内部类之一:静态内部类
有static修饰,属于外部类本身

3. 内部类之二:成员内部类
无static修饰,属于外部类的对象

4. 内部类之三:局部内部类
放在方法、代码块、构造器等执行体中

5. 内部类之四:匿名内部类概述

  • 本质上是一个没有名字的局部内部类,定义在方法中、代码块中等
  • 作用:方便创建子类对象,最终目的为了简化代码编写

格式:

new|抽象类名|或者接口名(){
    重写方法;
}

特点总结:

  • 匿名内部类是一个没有名字的内部类
  • 匿名内部类写出来就会产生一个匿名内部类的对象
  • 匿名内部类的对象类型就相当于当前new的那个类型的子类类型

6. 匿名内部类常见使用形式
匿名内部类可以作为方法的实际参数进行传输

7. 匿名内部类真实使用场景演示
开发中不是我们主动去定义匿名内部类的,而是别人需要我们写或者我们可以写的时候才会使用。
匿名内部类的代码可以实现代码进一步简化

三、常用API(应用程序编程接口)

  1. Object
    作用:
  • 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类
  • Object类的方法是一切子类都可以直接使用的,所以我们要学习Object类的方法。

(1) toString方法
在这里插入图片描述

开发中直接输出对象,默认输出对象的地址是没有意义的
开发中输出对象变量,更多时候希望看到对象的内容数据
toString存在的意义:父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息。

(2) equals方法
在这里插入图片描述

  1. Objects
    Objects类与Object还是继承关系
    官方在进行字符串比较时,没有对象自己的equals方法,而是选择了Objects的equals方法来比较两个对象。
    在这里插入图片描述
    Objects 的 equals 方法比较的结果是一样的,但是更安全。

  2. StringBuilder
    StringBuilder是一个可变的字符串类,可以把它看成是一个对象容器
    作用:提高字符串的操作效率,如拼接、修改等
    在这里插入图片描述

  3. Math
    包含执行基本数字运算的方法,Math类没有提供公开的构造器
    在这里插入图片描述

  4. System
    System功能是通用的,都是直接用类名调用,System不能被实例化
    在这里插入图片描述

  5. BigDecimal
    用于解决浮点型运算精度失真的问题

BigDecimal a1 = BigDecimal.valueOf(a);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值