java 多态中的向上转型和向下转型
来源:互联网 发布:匿名聊天源码 编辑:程序博客网 时间:2024/06/04 19:42
什么是向上转型?
答:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口
向上转型的优势和劣势?
优势:1.减少重复代码,使代码变得简洁
2.提高系统的可扩展性
劣势:1.向上转型时子类单独定义的方法会丢失,例如下面,new Dog后,用对象来调用Dog中的run方法就找不到
2.父类不能引用子类的对象 例如:Cat c = (Cat) new Animal(); 这样就会出现错误
package com.java1234.jichu;
public class DuoTai {
public static class Animal{
public void eat(){
System.out.println("animal eatting...");
}
}
public static class Cat extends Animal{
public void eat(){
System.out.println("我吃鱼...");
}
}
public static class Dog extends Animal{
public void eat(){
System.out.println("我吃骨头...");
}
public void run(){
System.out.println("我会跑...");
}
}
/**
* 将子类对象Cat转化为父类对象Animal
* 这个时候animal这个引用调用的方法是子类方法。
* @param @param args
* @return void
* @author jiangxueyou
*/
public static void main(String[] args) {
Animal animal = new Cat();//向上转型
animal.eat();
animal = new Dog();
animal.eat();
//animal.run //子类单独定义的方法会丢失。
Cat c = (Cat) new Animal();//子类引用不能指向父类对象
c.eat();
}
}
什么是向下转型?
答:向下转型是把父类对象转为子类对象。(请注意!这里是有坑的。)
//还是上面的animal和cat dog
Animal a = new Cat();
Cat c = ((Cat) a);
c.eat();
//输出 我吃鱼
Dog d = ((Dog) a);
d.eat();
// 报错 : java.lang.ClassCastException:com.chengfan.animal.Cat cannot be cast to com.chengfan.animal.Dog Animal a1 = new Animal();
Cat c1 = ((Cat) a1);
c1.eat();
// 报错 : java.lang.ClassCastException:com.chengfan.animal.Animal cannot be cast to com.chengfan.animal.Cat
为什么第一段代码不报错呢?相比你也知道了,因为a本身就是Cat对象,所以它理所当然的可以向下转型为Cat,也理所当然的不能转为Dog,你见过一条狗突然就变成一只猫这种操蛋现象?
而a1为Animal对象,它也不能被向下转型为任何子类对象。比如你去考古,发现了一个新生物,知道它是一种动物,但是你不能直接说,啊,它是猫,或者说它是狗。
向下转型注意事项:
向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型)也就是必须这样Animal a = new Cat();
向下转型只能转型为本类对象(猫是不能变成狗的)。
例如 Animal a = new Cat();
那么向下转型只能是 Cat c = ((Cat) a); 而不能Dog d = ((Dog) a);
向下转型的作用:举例说明
public class DuoTai2 {public void eat(Animal a) {
if (a instanceof Dog) {
Dog d = (Dog) a;
d.eat();
d.run();
// 狗有一个跑的方法
}
if (a instanceof Cat) {
Cat c = (Cat) a;
c.eat();
System.out.println("我也想跑,但是不会"); // 猫会抱怨
}
a.eat();// 其他动物只会吃
}
}
- java多态中的向上转型和向下转型
- java 多态中的向上转型和向下转型
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- java中的向上转型和向下转型
- java中的向下转型和向上转型
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- Java中的向上转型和向下转型
- Java中的向上转型和向下转型
- java中的向上转型和向下转型
- Java中的向上转型和向下转型
- Java 中的向上转型和向下转型
- 多态中的向上转型,向下转型
- 多态中的向上转型和向下转型问题
- Java向上转型和向下转型(多态核心)
- java多态向上转型和向下转型
- Java中的向下转型和向上转型理解
- HOG特征(方向梯度直方图特征)
- 慕课网收费资源
- 第十五天 流程结构(下)
- 很多人都不知道的监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
- [BZOJ 3884]上帝与集合的正确用法
- java 多态中的向上转型和向下转型
- MAMP (Mac) 配置虚拟主机
- Axon Framework官方文档(十三)
- QQ第三方登陆
- 快速排序算法在字符排序中的应用
- Eclipse编译器配置Python环境(包括tensorflow、sklearn库等)
- FastJson-fastjson的简单使用
- 【Angular】二级联动:如何从js二级联动,下拉框内容为动态查询
- 哈哈日语 五十音详细分析