对象类型的转换
来源:互联网 发布:centos升级kde 编辑:程序博客网 时间:2024/05/20 05:28
1、向上转型;
因为平行四边形是特殊的四边形,也就是说平行四边形是四边形的一种,那么就可以将平行四边形对象看作是一个四边形的对象。
可以使用下面的实例表示平行四边形与四边形的关系:
例1、在项目中创建Parallelogram类,再创建Quadrangle类,并使用Parallelogram类继承Quadrangle类,然后再主方法中调用父类的draw()方法;
class Quadrangle { // 四边形类 public static void draw(Quadrangle q) { // 四边形类中的方法 // SomeSentence }}public class Parallelogram extends Quadrangle { // 平行四边形类,继承了四边形类 public static void main(String args[]) { Parallelogram p = new Parallelogram(); // 实例化平行四边形类对象引用 draw(p); // 调用父类方法 }}
这里一直在强调一个问题,就是平行四边形也是一种类型的四边形,所以可以将平行四边形类的对看作是一个四边形的对象,这就是相当于“Quadrangle obj =new parallelogram()”就是把子类对象赋值给父类类型的变量,这种技术被称为“向上转型”,试想一下正方形类对象可以作为draw()方法参数,梯形类对象同样也可以作为draw()方法的参数,如果在四边形类的draw()方法中根据不同的图形对象设置不同的处理,就可以做到在父类中定义一个方法完成各子类的功能,这样可以使同一份代码毫无差别地运用到不同类型之上,这就是多态机制的基本思想。
将子类对象看作父类对象被称为“向上转型”,由于向上转型是从一个交具体的类到较抽象的类的转换,所以它总是安全的,如可以说平行四边形是特殊的四边形,但不能说四边形是平行四边形;
2、向下转型;
向下转型是将较抽象的类转换为较具体的类,这样的转型通常会出现问题。例如:不能说四边形是平行四边形的一种、所有的鸟都是鸽子等,可以说子类对象总是父类的一个实例,但父类对象不一定是子类的实例。
修改上述案例将四边形类对象赋予平行四边形类对象,来看一下在程序中如何处理这种情况;
例2、修改例1 ,在parallelogram类的主方法中将父类Quadrangle的对象赋值给子类Parallelogram的对象的引用变量将使程序产生错误。
class Quadrangle { // 四边形类 public static void draw(Quadrangle q) { // 四边形类中的方法 // SomeSentence }}public class Parallelogram extends Quadrangle { // 平行四边形类,继承了四边形类 public static void main(String args[]) { draw(new Parallelogram()); //将平行四边形类对象看作是四边形对象,称为向上转型操作; Quadrangle q = new Parallelogram(); //Parallelogram p=q; //将父类对象赋予子类对象,这种写法是错误的; //将父类对象赋予子类对象,并强制转换为子类型,这种写法是正确的; Parallelogram p = (Parallelogram)q; }}
从例2中可以看到,如果将父类对象直接赋予子类,会发生编译器错误,因为父类对象不一定是子类的实例。
越是具体的对象具有的特性越多,越抽象的对象具有的特性越少。在做向下转型操作时,将特性范围小的对象转换为特性范围大的对象肯定会出现问题,所以这时需要告知编译器这个四边形就是平行四边形,将父类对象强制转换为某个子类对象,这种方式称为显示类型转换;
- 对象的类型转换
- 对象类型的转换
- 对象类型的转换
- 对象类型转换的总结
- java的对象类型转换
- java的对象类型转换
- JAVA的对象类型转换
- Java对象类型转换的四个经验
- Java中对象类型的强制转换
- Java中对象类型的强制转换
- 对象跟基本类型之间的转换
- java学习:对象的类型转换、多态
- Java多态对象的类型转换
- Java对象类型转换的四个经验
- 常用对象类型之间的转换
- Java (对象间的类型转换)
- java中对象的类型转换
- 包含复杂类型的对象转换json
- 生成模型与判别模型
- 笔试编程题之数组求和
- 3175: [Tjoi2013]攻击装置
- 数据结构之图篇(1):概述
- bzoj 3175: [Tjoi2013]攻击装置
- 对象类型的转换
- Java--集合
- P1136 迎接仪式
- 2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 2)
- 源码托管平台
- input输入子系统
- Python编程入门到实践:(看书笔记总结9-7)
- java 多线程
- 进程与线程的区别,简单的图片理解+面试简要回答