1、多态性的概念
2、多态性的两种情况
3、对象的多态性
4、多态性小结
掌握多态性的程度就可以看出对面向对象掌握的多少
1、多态性的概念
1、多态是面向对象三大特性之一
2、什么是多态性
三大特性:封装、继承、多态
面向对象四大特征:封装、继承、多态、抽象
多态:多种形态
2、多态性的两种情况
1、多态性我们大概可以分为两类
(1)方法的重载与重写
(2)对象的多态性
方法重载:同一类中同返回值同方法名参数列表不同
方法重写:子类继承的方法,且方法体不同
3、对象的多态性
对象的多态性是从继承关系中的继承多个类而来
向上转型:将子类实例转为父类实例
格式:父类 父类对象=子类实例; →自动转换
以基本数据类型操作为例:int i=’a’;
(因为char的容量比int小,所以可以自动完成,char两个字节,int四个字节)
子类的实例在堆内存中,而声明的父类对象则是在栈内存中,这里就是让父类声明的对象指向子类的实例,在栈内存中储存的地址就是子类的实例在堆内存中的地址
切记抽象类里的抽象方法一定要加abstract,而接口中一切皆默认为抽象,可不以加。
具体的实现中如何体现多态的概念了,把类(类型)看做什么了?
八种基本类型
引用类型(自定义类型、类库中已经定义好的类)
小瓶水往大瓶装没问题,大瓶水往小瓶装可能就装不小,强制转换可能发生精度溢出就类似于小瓶装不下水漏了出来
小变大自动转换
大变小强制转换
父类是大的,因为它越抽象表现的东西越多
Man extends Person
按照口语上来理解记忆
Man是Person,继承什么就是什么喔!
Person是Man就没不行,没这个说法。
两种运用例子(向上转型)
1、狼装成羊,将父类中的狼方法在继承的子类中覆写为羊方法,这样用上转对象调用方法时,就是狼类型调用了羊方法,也就是狼装成了羊。
子类覆盖了父类的方法,运行时看new谁的对象,new谁的对象调用谁的方法
2、Person这个类型,有两个子类Women、 Man,new两个子类的对象时,就有两种不同的形态。每一种形态里都有不同的方法和属性。 也就是面向对象编程思想中,对象的不同行为和特征
向下转型:将父类实例转换为子类实例
格式:子类 子类对象=(子类)父类实例; 强制转换
以基本数据类型操作为例:char c=(char)97;
因为整型是4个字节比char2个字节要大,所以需要强制完成
java.lang.ClassCastException 类型转换异常
没有父子关系的两种类型不能强制转化哦
可以编译,但是运行时会出现异常
编程思想:人是父类,男人是人,女人是人,但男女之间不能强制转换
4、多态性小结
1、方法的重载与重写就是方法的多态性表现
2、多个子类就是父类中的多种形态
3、父类引用可以指向子类对象,自动转换(隔几代也行,爷爷都行)
4、子类对象指向父类引用需要强制转换(注意:类型不对会报异常)
5、在实际开发中尽量使用父类引用(更利于扩展:面向接口编程,面向抽象类编程)