★★★多态

含义(什么是多态)

同一个对象,在不同时刻体现出来的不同形态(猫既可以是猫类,也是动物类)

多态的前提和体现

  1. 有继承/实现关系.
  2. 有方法重写.
  3. 有父类引用指向子类对象.

    多态的访问

    方法重写也是一种多态思想

编译 运行
成员变量 看左边(父类) 看左边(父类)
成员方法 看左边(父类) 看右边(子类)
构造方法 和继承一样,每个构造方法中都存在一个super(),访问父类的空参构造

1.方法的参数如果是一个类,那么调用此方法需要传入此类的对象或者此类的子类对象
2.方法的返回值类型是一个类,那么需要返回此类的对象或者此类的子类对象
3.方法的参数如果是一个接口,那么调用此方法只能传入接口的实现类对象
4.方法的返回值是一个接口,那么需要返回此接口的实现类对象

★★多态的优缺点

  • 优点:提高代码的扩展性,灵活性
  • 缺点:不能访问子类的特有功能—>需要转型(instanceof)
  • 多态的转型:
    • 向上转型:把子类类型数据转换为父类类型数据 Animal a = new Dog();
    • 向下转型:把父类类型的数据转成子类类型数据 Cat cat = (Cat)a;
  • 转型注意:如果被转的对象,对应的实际类型和目标类型不是同一种数据类型,那么转换时会出现ClassCastException异常

    解决转型安全隐患

  • 使用关键字:instanceof

  • 作用:判断一个对象是否属于一种引用数据类型
  • 格式:对象名instanceof引用数据类型

    • 通俗的理解:判断关键字左边的变量,是否时右边的类型,返回的是boolean类型的结果

      内部类(★匿名内部类)

      分类

  • 成员内部类

  • 局部内部类-匿名内部类(局部内部类的一种)

    成员内部类

  • 位置和格式

    • 定义的位置:类中方法外
    • 创建成员内部类对象的格式:外部类名.内部类名 对象名 = new 外部类名().new 内部类名(参数);
  • 访问外部类的成员

    • 在内部类中有代表外部类对象的格式:外部类名.this,私有的也可以访问
    • 外部类要想访问内部类成员,需要创建内部类对象

      ★匿名内部类

  • 匿名内部类:没有名字的类,一次性的产品

  • 使用场景:直接调用方法,作为方法的传参,返回值类型
  • 好处:简化代码,快速实现接口或者抽象的抽象方法
  • 格式:
    • new 类名/接口名(){重写抽象方法} 注意:此处创建的是子类对象!!!
    • 使用方式:
      • 直接调用
      • 作为方法的参数传递
      • 作为方法的返回值类型

常用API:Java提供好的类与接口(简单理解)

Object类

  • 概述:类Object是层次结构的根,每个都把Object作为超类。所有对象(包括数组)都实现了这个类的方法
  • 方法:public String toString()
    • 如果一个类没有重写toString方法,那么打印此类的对象,打印的是此对象的地址值
    • 如果一个类重写了toString方法,那么打印此类的对象,打印的是此对象的属性值
    • 好处:把对象转成字符串,快速查看一个对象的属性值
    • 执行时机:打印对象时会默认调用toString方法
  • 方法public boolean equals()

    • 如果一个类没有重写equals方法,那么比较此类的对象,比较的是此对象的地址值
    • 如果一个类重写equals方法,那么比较此类的对象,比较的是此对象的属性值是否相等
    • 好处:可以比较对象的内容

      Objects类

  • Objects时JDK1.7新增的一个对象工具类,里面多是静态方法可以用来操作对象。比如对象的比较,计算对象的hash值,判断对手是否为空,比如里面的equals方法,可以避免空指针异常

日期相关的类 :Date类

简介:

  • 概述:java.util.Date表示特定的瞬间,精确到毫秒
  • 构造方法:
    • public Date():创建的对象,表示的是当前计算机系统的时间
    • public Date(long time):Date对象 = 1970/1/1/0:0:0+time毫秒值
  • 成员方法:

    • public long getTime():返回毫秒值=当前Date代表的时间-1970/1/1 0:0:0
    • public void setTime(long t):Date 对象=1970/1/1 0:0:0 +time毫秒值

      DateFirnat类

  • 概述:主要用于操作日期格式的一个类

  • 作用:
    • 格式化:Date —>String 格式化是指转化成String类型数据
    • 解析: String—>Date 解析是指转化成Date类型数据’
  • 构造方法:
    • SimpleDateFormat(String pattern)给定日期模板创建日期格式化对象
  • 成员方法:

    • public String format(Date d):格式化:将日期对象格式化为字符串
    • public Date parse(String s):解析:将字符串解析为日期对象

      Calendar类

      概述

  • java.util.Calendar类表示日历,内含有各种时间信息,以及获取,计算时间的方法

  • Calendar本身是一个抽象类,可以通过Calendar提供的静态方法 getInstance日历子类对象

    Calendar常用方法:

    | 方法名 | 说明 | | —- | —- | | public static Calendar getInstance() | 获取一个它的子类GregorianCalendar对象 | | public int get(int field) | 获取指定日历字段的时间值 | | public void set(int field,int value) | 设置指定字段的时间值 | | | |