---------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
多态性
前期(编译期)绑定:需要重载!
后期(运行时)绑定:需要重写!
l 向上转型:用父类的引用指向子类的对象;
l 向上转型之后:能调用的方法受引用类型的限制;
l 调用的是谁的方法:由实体类型决定,先从子类类型开始查找,如果没有再去父类类型中查找。
1 向上转型
B类继承了A类,我们就可以说B类的对象是一个A类的对象。
B对象是一个A
学生是一个人
人是一个动物
这么东西在语法上Java有支持!
| Manager m = new Manager(); Employee e = m;//把一个经理类的对象赋给了员工,即把一个子类对象赋给父类的引用! |
2 为什么向上转型
向上转型为了通用性
l 子类的功能很强大;
l 父类的引用很通用;
3 向上转型后访问接口受限
引用是遥控器,实体机器人。
可以向实体施加的操作由引用的类型来决定。无论你的实体有多少个功能,但如果用了Object类型的引用,那么就只能调用Object这个类型中存在方法。
| Employee e = new Manager(); |
问,使用e这个引用能调用setBonus(111)方法吗?答案不能!因为能调用什么方法,由引用类型来决定,而不是实体类型。
4 向下转型有隐患(强制类型转换)
向上转型,是自动的。无需强制转换!
而向下转型,需要强制类型转换!
不出错的向下转型,必然是以向上转型为前提。
| Object o = new Student();//上向转型 Student s = o;//向下转型,出错,因为需要强制转换 Student s = (Student)o;//向下转型,没有问题了。 |
出错的向下转型
| Object o = new ShiTou(); Money m = (Money)o;//这里不会有问题,但在运行时这里就出现了一个异常。ClassCastException |
1660

被折叠的 条评论
为什么被折叠?



