我是靠谱客的博主 超帅飞鸟,最近开发中收集的这篇文章主要介绍java的继承和多态作用_Java的继承与多态,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是继承?对于继承这个概念大家都会比较容易的理解,毕竟这个概念与我们的生活密切相关,特别是子女继承父母的财产。在Java的世界里,继承就是一个类(子类)拥有被继承类(父类)的属性和方法的特征。关于继承的概念就不多说了,在此只强调一点:Java只支持单继承,即只能拥有一个直接父类。

所谓多态就是一种类型具有多种状态,而在java中状态就是类型的属性,不同的属性取值代表了不同的状态。这里的多态强调的是作用于哪个对象。拿我们现实生活来说,如果哪天你从事的是教育工作,你这时是一个老师,而某一年你改行去开公交车,那么这时你就是一个司机,这样就形象的体现出来一个我可以在不同的时候呈现出不同的样子(即不同的状态)。在代码里面,“我”就是一种类型,一般会用接口类型或者抽象类类型来表示,同时我们会再创建两个类,一个类代表“老师”,一个类代表"司机",他们两个类都同时实现了同一个接口或者继承了共同的父类,这时,我们通过父类的引用就可以访问两个具体的子类,从而表现中父类具有多种状态。

有人可能会问,改变状态我只需要改变属性值就可以了啊,完全不用创建多个对象。例如:我可以创建一个Person类,然后里面有个work方法,还有个type属性来表示该人的类型,当对象的类型为“teacher”的时候,这个对象就是老师类型,当改为“司机”的时候,它的状态就变成了司机了,然后在相应的方法里面通过判断当前的类型来做相应的逻辑即可。也许这就是在没有出现面向对象,更没出现继承前的做法。面向对象的出现就是为了更好的抽象和封装,而前面的做法更类似面向过程,它不利于代码的修改和复用,也让阅读和维护变得更加困难。所以在讨论多态的时候,首先要站在面向对象的角度来来思考。我们经常说对象的属性就是对象的状态,那么多态似乎就是改变属性值就是了,之所以会这么想,就是因为思考的角度产生了问题,我想这也是初学者对多态很不可理解的原因之一。

其实多态的实现是和“动态绑定”相关的。所谓动态绑定,就是在运行的时候能够自动的判定调用哪个方法。那么我们先了解下Java动态绑定中调用对象方法的过程:

1,首先编译器查看声明的对象引用的类型(例如:Person person; 这里的所声明的类型就是Person类型)和要被调用的方法名(如果有超类,会包括超类中访问修饰符为public的同名方法)。这样编译器就得到了可能被调用的所有的方法。

2,接下来编译器根据调用方法时提供的参数类型来匹配要调用方法(这个过程被称为重载解析)。如果编译器没有找到匹配的方法,或者发现经过参数的类型转换后有多个匹配的方法,就会报告一个错。

对于引用类型,先完全匹配参数为该类型的方法,如果没有再查找父类型参数与之匹配的方法。

3,如果是private方法、static方法、final方法或者构造方法,那么编译器可以准确的知道应该调用哪个方法,这种调用方式被称为静态绑定,与之对应的,调用的方法依赖于隐式参数的实际类型,并且在运行时实现动态绑定。

4,当程序运行时,并采用动态绑定调用方法时,虚拟机一定会调用所引用对象的实际类型最合适的那个类的方法。(对象多态性的实现)

扩展:什么是方法的重载?什么是方法覆写?

重载:在同一个类中,具有两个或以上相同的名字、不同参数的方法的特征(其实就是指的的方法签名)。  重载只关心方法的签名,其他例如可见性,返回值类型都可以相同或者不同。 然而,对于参数类型是引用类型的时候,要考虑到多态的情况。

覆写:存在于继承的关系中,就是子类定义与父类中同名的方法,即不仅方法的签名一样,而且返回类型也要一样,并且子类方法的可见性不能低于超类。这里不会考虑到参数的继承关系,是必须一致的。

总结:多态在Java程序中的引用是相当广泛的,该种特性也是许多设计模式的基础,所以理清这点十分重要。

最后

以上就是超帅飞鸟为你收集整理的java的继承和多态作用_Java的继承与多态的全部内容,希望文章能够帮你解决java的继承和多态作用_Java的继承与多态所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部