java_三大特性之多态

Java有三个特性:封装,继承,多态
其中封装和继承都是为了多态而存在的。
多态的大白话解释:就是同一个东西的不同种形态,在这个形态中可以延申,可以补充,就好比数学,数学就是一个类,他里面有数学方法,对于这个(数学类)的多态就是分成高等数学,线性代数,概率论,离散性数学。这些分类(子类)就是多态。

多态的科学解释:指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行时才能确定一个引用变量到底会指向哪一个类的方法,这样不用修改方法就可以改变程序运行时所绑定的具体代码,让程序选择多个运行状态,这就是多态
多态则一定要通过重写方法,继承,父类的引用指向子类的对象 这三种方式来构成
1
指向子类的父类:如:Cat cat =new lihuacat();
这个lihuacat()就是Cat的子类,子类可以向上转型到父类。
翻译过来就是:喵是猫这个类型的引用变量指向狸花猫这个类型的对象;
那么从此后,这个cat就只包含了Cat所含有的方法和lihuacat这个方法对父类重写的方法,因为Cat只具备普通猫的功能比如说捕鼠,但是狸花猫不仅具备捕鼠还具备撒娇功能,那么向上转型的时候就只能有共同所有的捕鼠功能,因为只有捕鼠功能是共同所有的,而撒娇这个功能只是狸花猫这个分类所特有的,所以cat并不能调用自己没有的方法,也没法调用。
这里要注意一下:静态方法和变量(类方法和类变量)的话是不能用这个的,因为静态方法是静态绑定在方法上的,没有重写一说static通过类名调用,而其他方法是通过对象调用
那么在多态实现的时候,Cat cat =new lihuacat();的cat调用时要先判断子类(lihuacat)是否有重写父类的方法,如果有那么cat就会调用lihuacat里面的方法。
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。

本文参考:
java提高篇(四)-----理解java的三大特性之多态https://www.cnblogs.com/chenssy/p/3372798.html
Java中的封装、继承、多态https://www.cnblogs.com/pssp/p/6292665.html
Java多态总结https://www.cnblogs.com/mz-lover/p/4786337.html

发布了32 篇原创文章 · 获赞 7 · 访问量 4018

猜你喜欢

转载自blog.csdn.net/qq_43026792/article/details/90217721