java多态向上、向下转型问题
来源:互联网 发布:js二维数组的遍历 编辑:程序博客网 时间:2024/05/16 13:45
向上转型
假定父类为动物,子类为狗,父类有一个方法发声(),狗继承并覆盖了一个发声方法。
在子类重写该方法 则:动物 a=new 狗();//这就为向上转型a.发声();
在调用 a.发声();时调用的是狗的发声()也可调动物类其他方法 但不能调用狗类方法
向上转型都会成功,是安全的。 就像说狗是动物没问题。
向下转型
若修改为动物 a=new 狗();
狗b=(狗)a;//这里向下转型
这时b可调用动物类未被重写的方法和狗类所有方法(包括重写动物类的方法)
动物 a=new 动物();
a.发声();//调动物类方法
狗 b=(狗)a;//这也是向下转型 但下面通过b若调用 动物 或 狗类中任意方法都报异常
也就是说向下转型可能会出错 不能说动物是狗
实例:
dog是animal的子类,animal里只有一个“吃”的方法,dog类里有“吃”和“叫”两个方法。当向上转型时,
Animal a = new Cat();
问题1:这个过程叫做父类引用指向子类对象?为什么不叫做子类引用指向父类对象呢?
答:引用a的类型是Animal,是Cat的父类。所以是“父类引用指向子类对象”。如果是“子类引用指
向父类对象”,那应该写成 Cat a = new Animal();但这显然是不和逻辑的。
问题2:子类继承父类可以使子类的功能更强大。而向上转型后,父类也只能调用父类已经有的方法,
而不能调用子类新增加的功能啊,多态还有什么用呢?这一点也好理解,子类知道哪个是他的父类,
但父类不会知道哪个类是他的子类,所以不能调用父类中没有的方法。
对于我上面的问题,可不可以这么来解释:因为子类可以重写父类中的方法,向上转型时,父类可以
调用子类中重写过的方法,这样 间接的也扩充了父类的功能。我这么理解对吗?
答:“向上转型后,父类也只能调用父类已经有的方法”。但是子类如果覆盖了父类的方法,那么即
时候,使得你也不必关系具体的实现细节,只要知道“这个类型中的某个方法能帮我完成工作”就可以了。
问题3:向下转型就是Animal a = new Cat(); Cat c = (Cat) a; 可不可以理解为:父类的对
象强制转换成子类的类型(Cat型),然后赋给子类的对象,完成向下转型。这样的话子类对象(c)既可
以调用"吃"的功能,又能调用“叫”的功能。这样也扩充了父类的功能。
答:向下转型,是“引用的类型”的变化,不是对象实例类型的变化。new什么,就是什么。不会因为
向上或者向下转型而改变自己的类型。
问题4:向下转型时,子类对象c调用的方法是父类的还是子类的呢??
答:不管向上还是向下转型,调用的都是实际类型中的那个方法。比如,Animal a = new Cat(); a.
叫()。那这个叫就是Cat类型实例中的“叫”方法。使向上转型,方法的行为也表现为覆盖后的行为。这
也是多态的一种体现。向上转型更多的用来体现一种编程上的“约定”。所有继承某个类或者实现某个
接口的类,一定包含某个方法,这样在调用的
- java多态向上、向下转型问题
- Java向上向下转型问题
- 多态中的向上转型和向下转型问题
- Java 多态部分 向上转型 向下转型
- java多态中的向上转型和向下转型
- java多态使用、向上转型、向下转型
- Java向上转型和向下转型(多态核心)
- java多态向上转型和向下转型
- java的多态(向上转型、向下转型)
- 多态实现(向上转型、向下转型)--java
- Java 多态部分 向上转型 向下转型
- java 多态中的向上转型和向下转型
- 多态中的向上转型,向下转型
- 【Java】向上转型 向下转型
- Java 向上转型,向下转型
- java 向上转型向下转型
- java 的多态 及向上向下转型
- java中的类的向上转型向下转型问题
- cmake,ros,c++和opencv经常出现的问题总结
- ubuntu下git安装及使用
- java邮件发送 easymail
- HDU3045 Picnic Cows
- 支付宝支付与微信支付
- java多态向上、向下转型问题
- TrueCrypt代码 之 检查卷文件系统及去除卷只读属性
- 从dmesg里分析core原因
- 使用python的yield实现任务调度.给定一个任务列表,每个任务轮流切换执行,类似于切片
- 学术工具-Citavi 简介
- STL中的sort
- Linux操作系统实时性学习总结
- MySQL主从复制
- C++ 编程题练习-Set(9-3)