java--多态、内部类、常用API

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

什么是多态?
同类型的对象,执行同一个行为,会表现出不同的行为特征。

多态的概述,多态的形式

在这里插入图片描述
多态中成员访问特点
方法调用:编译看左边,运行看右边。
变量调用:编译看左边,运行也看左边。(多态侧重行为多态)
在这里插入图片描述

多态的前提
有继承/实现关系;
有父类引用指向子类对象;
有方法重写。

多态的好处

优势
在多态形式下,右边对象可以实现解耦合,便于扩展和维护。
(举例:玩具车为父类 有很多子类,车轮/电池。如果电池或车轮坏了,换一个安上去就好)
在这里插入图片描述
定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。
在这里插入图片描述

多态下会产生的一个问题:
多态下不能使用子类的独有功能
在这里插入图片描述

多态下引用数据类型的类型转换

自动类型转换(从子到父):子类对象赋值给父类类型的变量指向。
强制类型转换吗(从父到子)
此时必须进行强制类型转换:子类 对象变量 = (子类)父类类型的变量
作用:可以解决多态下的劣势,可以实现调用子类独有的功能。

在这里插入图片描述 注意: 如果转型后的类型和对象真实类型不是同一种类型,那么在转换的时候就会出现ClassCastException
在这里插入图片描述Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换
在这里插入图片描述在这里插入图片描述当在方法里面看不到是什么对象的时候,就很有用处了
在这里插入图片描述1. 引用数据类型的类型转换,有几种方式?
自动类型转换、强制类型转换。
2. 强制类型转换能解决什么问题?强制类型转换需要注意什么。
可以转换成真正的子类类型,从而调用子类独有功能。
有继承关系/实现的2个类型就可以进行强制转换,编译无问题。
运行时,如果发现强制转换后的类型不是对象真实类型则报错。
类型转换异常:ClassCastException

内部类

内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主)。
在这里插入图片描述

内部类概述

外部类不能用private修饰。

内部类的使用场景、作用
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计。
内部类通常可以方便访问外部类的成员,包括私有的成员。
内部类提供了更好的封装性,内部类本身就可以用private protectecd等修饰,封装性可以做更多控制。

内部类之一:静态内部类[了解]

什么是静态内部类?
有static修饰,属于外部类本身。
它的特点和使用与普通类是完全一样的,类有的成分它都有,只是位置在别人里面而已。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
静态内部类的使用场景、特点、访问总结。
如果一个类中包含了一个完整的成分,如汽车类中的发动机类。
特点、使用与普通类是一样的,类有的成分它都有,只是位置在别人里面而已。
可以直接访问外部类的静态成员,不能直接访问外部类的实例成员。
注意:开发中实际上用的还是比较少。
在这里插入图片描述
在这里插入图片描述

内部类之二:成员内部类[了解]

什么是成员内部类?
无static修饰,属于外部类的对象。
JDK16之前,成员内部类中不能定义静态成员,JDK 16开始也可以定义静态成员了。

在这里插入图片描述
在这里插入图片描述

内部类之三:局部内部类[了解]

局部内部类 (鸡肋语法,了解即可)
局部内部类放在方法、代码块、构造器等执行体中。
局部内部类的类文件名为: 外部类$N内部类.class。

内部类之四:匿名内部类概述[重点]

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

在这里插入图片描述

特点总结:
匿名内部类是一个没有名字的内部类。
匿名内部类写出来就会产生一个匿名内部类的对象。
匿名内部类的对象类型相当于是当前new的那个的类型的子类类型。
在这里插入图片描述

匿名内部类常见使用形式

在这里插入图片描述

匿名内部类真实使用场景演示

在这里插入图片描述

常用API

Object

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

toString方法

toString存在的意义
父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!

Object的toString方法的作用是什么?
让子类重写,以便返回子类对象的内容。

在这里插入图片描述

equals方法

在这里插入图片描述Object的equals方法的作用是什么?
默认是与另一个对象比较地址是否一样
让子类重写,以便比较2个子类对象的内容是否相同。

Objects

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

StringBuilder

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

在这里插入图片描述
1、为什么拼接、反转字符串建议使用StringBuilder?
String :内容是不可变的、拼接字符串性能差。
StringBuilder:内容是可变的、拼接字符串性能好、代码优雅。

定义字符串使用String
拼接、修改等操作字符串使用StringBuilder

Math

Math类
包含执行基本数字运算的方法,Math类没有提供公开的构造器。
如何使用类中的成员呢?看类的成员是否都是静态的,如果是,通过类名就可以直接调用
在这里插入图片描述在这里插入图片描述

System

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

BigDecimal

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
BigDecimal的作用是什么?
解决浮点型运算精度失真问题。
BigDecimal的对象如何获取?
BigDecimal b1 = BigDecimal.valueOf(0.1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值