多态概述

同一个对象,在不同时刻表现出来的不同形态

举例:猫
我们可以说猫是猫:猫 cat = new 猫();
我们也可以说猫是动物:动物 animal = new 猫();
这里猫在不同的时刻表现出来了不同的形态,这就是多态

多态的前提

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

    多态中成员访问的特点

  • 构造方法:同继承一样,子类会通过super访问父类构造方法
  • 成员变量:编译看左边(父类),执行看左边(父类)
  • 成员方法:编译看左边(父类),执行看右边(子类)

为什么成员变量和成员方法的访问不一样呢?

  • 因为成员方法有重写,而成员变量没有

    多态的好处和弊端

  • 多态的好处:提高了程序的扩展性

    • 具体体现:定义方法的时候,使用父类型作为参数,该方法就可以接收这父类的任意子类对象
  • 多态的弊端:不能使用子类的特有功能

    多态中的转型

  • 向上转型

    • 从子到父
    • 父类引用指向子类对象
  • 向下转型

    • 从父到子
    • 父类引用转为子类对象(强制类型转换)

      多态中的转型存在的风险

  • 概述:如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException

避免强转出现的问题

  • 关键字 instanceof
  • 使用格式:
    • 变量名 instanceof 类型
  • 判断关键字左边的变量,是否是右边的类型,返回boolean类型结果