前言:
多态是面向对象编程的一个重要特性,实现方式主要体现在重载和重写,以及接口的实现。多态的出现使得调用者对类的使用成本降低,可降低代码的“圈复杂度”,避免使用大量的if-else,可扩展能力强。
1、认识多态
(1)概念
多态通俗来讲就是多种形态,例如某个行为,不同的对象去做可能会发生不同的事情。例如下图:
扫码付款这行为由不同对象采用不同的方法,最终达到这一行为,这就是多态。
(2)实现条件
1.必须是在继承体系下
2.子类必须通过父类中的方法进行重写
3.通过父类的引用调用重写的方法
要想实现多态这需要了解到重写和向上转型的概念。
2、重写
(1)概念
重写与重载相似,但不同,重写是外壳不一,核心可变。如在父类中存在一种方法,子类中写出与父类方法返回值、方法名、参数列表都相同的方法出来,这就是重写。
重写演示:
如图,wheel方法被重写。
(2)重写规则
重写的返回值,形参都不能改变,方法体重写。
子类在重写父类的方法时,返回值 方法名(参数列表)要与父类的一模一样。(除非返回值是父类和子类类型的)
访问权限不能比父类的低,只能大于等于父类。如用public修饰的父类,子类就不能用protected来修饰
父类中被static、pirivate、final修饰的方法和构造方法,子类都不能去重写。
(3)动态绑定
这是关于重写的一个概念,就是在编译时,不能确定方法的行为,只能先确定父类的方法,程序运行时,检测子类有无重写的方法,然后进行覆盖(重写),调用子类重写的那个方法。
(4)重写与重载区别
静态绑定
重载还有个概念,叫做静态绑定,就是在编译时,根据用户所传的参数类型就能当场确定具体调用的方法
重写与重载的区别就在于参数列表,返回类型上,重写不可修改(返回值在特定条件除外),重载参数必须修改,其他可以修改。(访问限定符对于重写有更严格的限制)
3、向上转型
向上转型就是创建一个子类对象,将其当成父类来使用
(1)语法格式:父类类型 对象名 = new 子类类型()
(2)使用案例:
1.直接赋值
2.方法传参
3.方法返回值
向上转型的优点:
让代码更加灵活
向上转型的缺点:
不能调用到子类特有的方法,也引用不到子类的成员变量
4、向下转型
比起向上转型,向下转型具有一定的风险,需要用到强制类型转换。
有个关键字可以提高向下转型的安全性,就是instanceof
若该表达式为true,则能安全转换:
5、多态的注意事项
属性没有多态性
当父类子类都有同名属性时,通过父类引用只能调用父类自己的成员属性
构造方法没有多态性:
例如在子类的重写方法中执行一段输出成员属性的代码,父类的构造里面执行子类的方法。创建对象时会优先调用父类实例,父类构造,然后再到子类实例,子类构造。若是执行父类的构造方法,会被子类进行重写,而因为成员属性没有多态性,会造成子类没有实例化就输出代码,导致结果有差错的情况。
以上就是多态的内容,希望大家点点赞,多多包含,谢谢各位!
还没有评论,来说两句吧...