码迷,mamicode.com
首页 > 其他好文 > 详细

10.3 对象类型的转换

时间:2018-08-25 14:36:42      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:ext   ide   main   bubuko   ack   实例化   功能   转换   引用   

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 对象类型的转换

标签:ext   ide   main   bubuko   ack   实例化   功能   转换   引用   

原文地址:https://www.cnblogs.com/studycode/p/9533155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!