现在已经学习完了关于继承的所有概念,但是并不意味着只要使用继承就可以实现代码的全部重用,而在继承之后又有了一个重要的核心概念:多态性。
在Java里面对于多态的核心表现主要有以下两点:
●方法的多态性:
|-方法的重载:同一个方法名称可以根据参数的类型及个数的不同调用不同的方法体;
|-方法的覆写:同一个父类的方法,可能根据实例化的子类的不同也有不同的实现。
●对象的多态性(前提:方法覆写):
|-【自动,90%】对象的向上转型:父类 父类对象 = 子类实例;
|-【强制,1%】对象的向下转型:子类 子类对象 = (子类)父类实例;
|-9%是不进行转型,例如:String;
不管是否发生了向上转型,其核心的本质还是在于:你使用的是哪一个子类(new在哪里),而后你调用的方法是否被子类所覆写了。
向下转型指的是将父类对象变为子类对象,但是在这之前需要首先明确一个核心概念,为什么需要向下转型?当你需要使用到子类扩充操作的时候就需要采用向下转型。
但是并不是所有的父类对象都可以向下转型【此概念一般开发中用不到】:如果要想进行向下转型,操作之前一定要首先发生向上转型,否则在转型时会出现:ClassCastException。
但是现在就有一个问题出现了,如果向下转型可能存在有隐患,那么如何转型菜靠谱呢?最好的做法是先进行判断,而后再进行转型,那么就可以依靠instanceof关键字来实现了,此关键字的使用语法如下:
●子类对象 instanceof 类,返回的是boolean型数据;
通过以上的分析就可以清楚,对象的向上转型有一个最为核心的用途:操作参数统一。
总结:
1. 对象多态性实现的核心在于方法的覆写;
2. 通过向上转型可以实现接收参数的统一,而向下转型可以实现子类扩充方法的调用(一般不操作向下转型);
3. 两个没有关系的对象是不能进行转型的,一定会发生ClassCastException,所有向下转型是存在有安全隐患的。