在java中,对多态的核心表现有以下俩点:
1.方法的多态性,①方法的重载:在一个类中,方法名相同,参数列表不同(参数个数,类型,次序不同),返回值相不相同没关系
②方法的覆写:在不同作用域中(父类和子类),函数名相同,参数相不相同无所谓。
2.对象的多态性:(抽象类和接口才能体会到用处)前提:方法覆写。
俩种表现方式:
①向上转型(90%)用于参数统一化
//父类 父类引用 = new 子类();
Person per = new Student();
②向下转型(1%):当父类引用要调用子类扩充的方法时才需要向下转型
//子类 子类引用 = (子类)父类引用
Person per = new Student();
Student stu = (Student)per;//向下转型
//要发生向下转型必须先发生向上转型(认爹)
//----------------------------
Person per = new Person();
Student stu = new Student();
//错误,没发生向上转型。运行时异常ClassCaseException类型转换异常
向上转型实现:
不管是否发生向上转型,核心本质在于:使用的是哪一个子类(new在哪里),以及调用的方法在哪里被覆写了。向下转型是把父类对象转为子类对象:
但是向下转型在用之前必须先发生向上转型,否则会出现ClassCaseException。那么既然存在安全隐患,那如何使用才会靠谱,最好是在转之前判断一下,那就可以使用instanceof关键字,改关键字语法如下:
子类对象 instanceof 类
返回值为boolean
参数统一化:要求定义一个方法,该方法能接受所有Person类包含其子类的实例,并调用Perosn的方法
通过这个我们清楚对象向上转型有一个最核心的用途:参数统一化
多态性总结:
1.对象多态性的核心在于方法的覆写。
1.通过对象的向上转型可以实现接收参数的统一,向下转型可以实现子类扩充方法的调用(一般不操作向下
转型,有安全隐患)。
1.两个没有关系的类对象是不能够进行转型的,一定会产生ClassCastException。