面向对象进阶(多态、内部类、常用API)
1. 多态
1.1 什么是多态?
父类引用指向子类对象
1.2 多态的格式
父类类型 对象名称 = new 子类构造器;
接口 对象名称 = new 实现类构造器;
1.3 多态访问特点
- 方法调用:编译看左边,运行看右边。
- 变量调用:编译看左边,运行也看左边。(多态侧重行为多态)
1.4 多态的前提
- 有继承/实现关系;
- 有父类引用指向子类对象;
- 有方法重写。
1.5 多态的优势和劣势
-
优势:
- 实现解耦合,便于扩展和维护
-
劣势:
- 多态下不能使用子类的独有功能
1.5 多态下引用数据类型的类型转换
-
自动类型转换(从子到父)
-
强制类型转换吗(从父到子)
- 此时必须进行强制类型转换:子类 对象变量 = (子类)父类类型的变量
- 作用:可以解决多态下的劣势,可以实现调用子类独有的功能。
-
Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换
2. 内部类
匿名内部类
作用:方便创建子类对象,最终目的为了简化代码编写。
格式:
new 类|抽象类名|或者接口名() {
重写方法;
};
3. 常用API
-
Object
-
toString():默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址
-
equals(Object o):默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false
- 父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。
-
-
Objects
- public static boolean equals(Object a, Object b):比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较
- ==public static boolean isNull(Object obj) ==:判断变量是否为null ,为null返回true ,反之
- 对象进行内容比较的时候建议使用Objects提供的equals方法
-
StringBuilder
- StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器。
- 作用:提高字符串的操作效率,如拼接、修改等。
-
System
- currentTimeMillis():返回当前系统的时间毫秒值形式
-
BigDecimal
- 解决浮点型运算精度失真的问题
- 解决浮点型运算精度失真的问题