多态:
多态是继封装、继承之后,Java面向对象中的第三个特性
同一行为,通过不同的事物,可以体现出不同的形态。多态,描述的就是这样的状态
定义:
是指同一行为(方法),具有多个不同的表现形式
多态的前提:
1.继承或者实现【二选其一】
2.方法的重写[意义提现:【不重写,无意义】
3.父类引用指向子类对象【格式提现】
多态的体现:
格式:(类型转换 父类的转子类)
父类类型 变量名 = new 子类类型();
变量名.方法名();
父类类型:指子类对象继承的父类类型,或者实现的父接口类型。
如: Fu fu = new Zi(); fh.method();
备注:当你在使用多态的时候,程序会首先检查父类中是否含有该方法,
如果没有,择编译错误; 如果有,执行的是子类重写之后的方法。
多态的好处:
在程序开发过程中,父类类型一般作为方法形式参数,传递子类对象给方法,
当你进行方法的调用,更能体现出多态的扩展性和便利性。
总结:由于多态特性的支持,不仅仅是替代,在扩展性方面,无论之后再出现多少个字类,
我们不需要再重复的定义showXxxEat()方法,直接使用showAnimalEat()方法。
所以多态的好处,体现在可以使程序编写更简单,并且有良好的扩展性。
引用类型的转化
引用类型就好比多态中的父类引用指向子类就是
多态的转型为:向上转型和向下转型
向上转型:
多态本身是子类类型向上转换的过程,这个过程是默认的。
当父类引用指向一个子类对象的时候,便是向上转型。
格式:
父类类型 变量名 = new 子类类型(); 如:Animal animal = new Cat();
向下转型:
父类类型向子类类型向下转换的过程,这个过程是强制的。一个已经向上转型的子类对象,将父类引用转换为子类引用,可以使用强制类型转换格式,便是向下转型。
格式:
子类类型 变量名 = (子类类型)父类变量名; 如 Cat cat = (Cat) animal;
为什么要转型?
当使用多态方式调用方法时,首先会检查父类中是否含有该方法,如果没有,则编译错误,进一步说,不能直接调用子类拥有而父类没有的方法。所以,想要调用子类特有的方法,必须向下转型。
转型的异常:
两个类型没有任何继承关系,不符合类型转换的定义。为了避免ClassCastException的发生,Java提供了instanceof关键字,给引用变量做类型校验。
格式:
变量名 instanceof 数据类型 先拿变量名与数据类型判断 如果变量名属于该类型数据 返回true 如果变量名不属于该数据类型 返回false