面向对象进阶(多态、内部类、常用API)

222 阅读2分钟

面向对象进阶(多态、内部类、常用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

    • 解决浮点型运算精度失真的问题
      在这里插入图片描述