欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 15:13:49
首先我们知道Java是一门面向对象的语言 面向对象三大特性,封装、继承、多态。 封装、继承、多态 ↓ 无论是学习路线,还是众人的口语习惯,都是按照这个这样进行排序,这是有原因的。因为封装好了才能继承,封装和继承都是为多态做准备的。 多态的三个前提条件: 1、继承关系 2、方法的重写 3、向上转型(即 ......

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

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

封装、继承、多态      ↓

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

 

多态的三个前提条件:

1、继承关系

2、方法的重写

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

 

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

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

废话不多直接上图举例:

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

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

 

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

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

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

 

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

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

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