10.3 对象类型的转换

Posted studycode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.3 对象类型的转换相关的知识,希望对你有一定的参考价值。

1、向上转型

  a、平行四边形类继承了四边形类,常规的继承图都是讲顶级类设置在页面的顶部,然后逐渐向下,所以将子类对象看做是父类对象被称为“向上转型”。由于向上转型是ongoing一个具体的类型到较抽象类型的转换,所以它总是安全的,如可以说是平行四边形是特殊的四边形,但不能说四边形是平行四边形。
  b、如果在四边形父类的draw()方法中根据不同的图形对象设置不同的处理,就可以做到父类中定义一个方法完成各个子类的功能,这样可以使用同一份代码毫无差别地运用到不同类型之上,这就是多态机制的基本思想(在10.6节中将对多态进行详细的介绍)。

例子10.5

技术分享图片
 1 package aaaa;
 2 
 3 class Quadrangle{        //四边形类
 4     public static void draw(Quadrangle q) {        //四边形类中的方法
 5         //SomeSentence
 6         System.out.println("调用四边形draw()方法!");
 7     }
 8 }
 9 
10 public class Parallelogram extends Quadrangle{        //平行四边形类,继承了四边形类
11     public static void main(String[] args) {
12         Parallelogram p = new Parallelogram();        //实例化平行四边形对象引用
13         draw(p);        //调用父类方法
14     }
15 }
View Code

技术分享图片

2、向下转型
a、通过向上转型可以推理出向下转型是讲较抽象类转为较具体的类。这样的转型通常会出现问题。可以说子类对象总是父类对象的一个实例,但父类对象不一定是子类对象的实例。
b、在做向下转型操作时,需要告知编译器这个四边形就是平行四边形。将父类对象强制转换为某个子类对象,这种方式成为现实类型转换。
c、当在程序中使用向下转型技术时,必须使用现实类型转换,向编译器指定将父类对象转换为哪一种类型的子类对象。

例子10.6

技术分享图片
 1 class Quadrangle_A{
 2     public static void draw(Quadrangle_A q) {
 3         //SomeSentence
 4         System.out.println("调用父类中的draw()方法");
 5     }
 6 }
 7 public class Parallelogram_A extends Quadrangle_A{
 8     public static void main(String[] args) {
 9         draw(new Parallelogram_A());        //调用父类draw()方法
10         
11         //将平行四边形类对象看做是四边形对象,成为向上转型操作
12         Quadrangle_A q = new Parallelogram_A();
13 
14         //将父类对象赋予子类对象,这种写法是错误的
15         //Parallelogram_A p = q;
16         
17         //将父类对象赋予子类对象,并强制转型为子类型,这种写法是正确的
18         Parallelogram_A p = (Parallelogram_A)q; 
19         draw(new Parallelogram_A());        //调用父类draw()方法
20     }
21 }
View Code

技术分享图片

 





以上是关于10.3 对象类型的转换的主要内容,如果未能解决你的问题,请参考以下文章

对象不能从 DBNull 转换为其他类型。

第10章 文档对象模型DOM 10.3 Element类型

JS的数据类型判断函数数组对象结构处理日期转换函数,浏览器类型判断函数合集

片段“F1”不能在这里传播,因为“节点”类型的对象永远不能是“商店”类型

java中把json怎么转换成数组?

10.2-10.3 datetime与时间格式的相互转换