Java面试题,Java三大特性之一——多态的理解

首先我们知道Java是一门面向对象的语言

面向对象三大特性,封装继承多态

封装、继承、多态      ↓

无论是学习路线,还是众人的口语习惯,都是按照这个这样进行排序,这是有原因的。因为封装好了才能继承,封装和继承都是为多态做准备的。

 

多态的三个前提条件:

1、继承关系

2、方法的重写

3、向上转型(即父类引用指向子类对象)

 

多态又分为两种情况,编译时多态运行时多态。先简单介绍一下这两种的区别

编译时多态:对象引用本类实例

废话不多直接上图举例:

上图我们看到cat对象和animal对象都是引用的本类实例,也就是说,在方法启动前,编译已经确定了上面两个toString方法分别是谁调用的

 

运行时多态:父类引用指向子类对象

 

上图是父类引用指向子类对象,也就是向上转型。这里的toString方法我们知道返回的肯定是子类的方法的结果。这就是Java的运行时多态(接下来是重点,注意看了),Java从实例类开始寻找匹配的方法,如果没有匹配的方法,沿着继承关系逐渐往上匹配父类的方法

 

上面的关系捋顺再说明多态的好处:

我们看到Cat类是继承Animal类的,继承性提高了代码的可维护性

向上转型,不同的实例类,产生不同的结果。如果我在定义一个Dog类也是一样,会输出Dog的toString。这就是代码的可拓展性

 

 

posted @ 2019-04-12 17:43  眼观心海  阅读(3530)  评论(0编辑  收藏  举报