代码中的多态: * 其实就是对象本身存在不同的数据类型 * * 多态的前提条件: * 1.要继承关系或者实现关系的存在 * 2.必须要有方法的重写(备注:没有方法重写,多态的格式也不会报错,但是这样的多态没有任何的实际意义) * 3.如果是继承关系: * 父类的引用指向子类对象(格式:父new子) * 如果是实现关系: * 父接口的引用指向实现类对象(格式:父接口new实现类) * * 在多态的情况下,类中各成员的特点: * 构造器 * 实例变量 * 实例方法 * 多态情况下实例方法的特点 * 在多态的情况下调用方法,先判断父类或者父接口中是否含有这个方法, * 如果有,执行子类或者实现类重写后的方法;如果没有,编译报错
* * 在多态情况构造器的特点: * 构造器执行情况和以前构造器的使用一模一样,无需额外关注
* 引用数据类型之间的转换: * 构成继承关系或者实现关系的父子之间的转换 * * 分类: * 自动类型转换(向上转型) * 将子类类型的对象转换为父类类型的对象(其实就是多态的格式) * 强制类型转换(向下转型) * 将父类类型的对象转换为子类类型的对象 * * 向下转型的格式 * 子类类型 对象名 = (子类类型)父类类型的对象; * * 基本数据类型的强制转换可能引发数据的溢出或者数据的损失 * * 向下转型的注意事项: * 将多态类型的对象进行强制类型转换的时候,可能发生ClassCastException(类型转换异常) * * ClassCastException解决方案:instanceof关键字 * 含义:判断指定的对象在内存中是否为指定类型或者指定类型的子类类型 * 格式: * 对象 instanceof 类型 * 如果该对象在内存中是该类型或者该类型的子类类型时,返回true * 如果该对象在内存中不是该类型或者该类型的子类类型时,返回false