java的动态绑定机制非常重要
实例A我们来看一个实例:
阅读上面的代码,请说明下面的程序将输出什么结果:
程序将会输出40和30,这个实例很简单,直接看运行类型即可,该代码的运行类型为B,所以会调用B类的方法
实例B我们将上面的代码变通一下,将子类中的如下代码块注销:
随后继承机制会访问父类的sum方法:
那么这里有一个问题,此处的getI(),会执行子类的还是父类的呢?
当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
代码的运行类型依然是B,所以此处会执行子类的getI()方法,结果输出为30
实例C现在我们再变通以下上面的代码
再将子类中如下的代码块注销:
继承机制会执行父类的sum1方法:
那么这里有一个问题,此处的i,会使用子类的还是父类的呢?
属性没有动态绑定机制,哪里声明,哪里使用(使用当前类的)
此处的i在父类进行声明,所以会选用父类的i属性,结果为20
2.多态数组定义:
数组的定义类型为父类类型,但是保存的实际元素类型为子类类型
Person父类:
Student子类:
Teacher子类:
测试多态数组的使用:
输出:
dahe 20wangwei 11 100.0zhangsan 12 60.0wang 33 15000.0li 55 25000.0
3.多态数组的高阶用法现在,教师子类新增了教学方法:
学生子类新增了学习方法:
那么,有没有办法通过多态数组来访问他们子类对应的独有的方法呢?事实上,可以通过巧妙使用instanceof来解决:
变通一下,改变多态数组的循环操作:
输出:
dahe 20wangwei 11 100.0学生:wangwei正在学习!zhangsan 12 60.0学生:zhangsan正在学习!wang 33 15000.0老师:wang正在讲课!li 55 25000.0老师:li正在讲课!
大功告成!多态数组即强大又完美!
4.多态参数方法定义的形参类型为父类类型,实参类型允许为子类类型
接下来我们来演示以下多态参数的使用:
父类:
员工子类:
经理子类:
我们来测试一下,求不同岗位的雇员的年薪:
输出:
12000.062000.0
5.多态参数的高阶用法我们来对上面的多态参数代码做一个完善,如果传入的是员工,则调用自己的work方法,如果传入的是经理,则调用自己的manage方法
增加一个下面的方法:
测试:
输出:
普通员工:张工正在工作!经理:milan正在管理!
到此这篇关于深入解析Java多态进阶学习的文章就介绍到这了,更多相关Java多态内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!