文档章节

向上造型与向下造型

D
 DARK_CS
发布于 2017/04/24 18:02
字数 731
阅读 109
收藏 0

首先,解释一下什么是向上造型和什么向下造型。

向上造型:子类引用的对象转换为父类类型。例如:A类是父类,B类是子类。提到子类和父类用B类继承A类更合适。A a = new B();

注:向上造型的一个特点:当子类向上造型后的对象的方法中不存在子类的自己的特色的方法,只有父类的方法。而且子类对于父类进行重写的方法。向上造型的对象的方法为重写后新的方法。

向下造型:父类引用的对象转换为子类类型。但是对于父类的引用对象一定要是由子类实例化的,也就是说向下造型的出现一般的情况都是和向上造型一起出现的。

举个例子来说明一下上面的一段话的意思:

A类是父类,B类是子类

A a = new A(); B b = new B();

A a1 = b; ---向上造型

B b1 =(B)a1;-----向下造型

B b2 = (A)a;--------这个就会报错。ClassCastException

下面我在多说几句,这个向下造型在我们开发中具体作用。单独看向下造型是没有什么作用。和我在上面描述的其实向下造型就是向上造型的反向作用。我们的世界是平衡的,既然java的开发者发明了向上造型,你应该一起发明了向下造型。

下面这一段的解释希望大家对于泛型有一定的理解。如果不了解泛型的概念,简单了解泛型的概念进行阅读。

我给大家通过的一个现实的事件说起:

体育馆里面有一个球柜,里面放着足球,篮球,排球。

public Interface ball{

}

public class football extends ball{

         public void place(){ System.out.println("football place"); }

}

public class basketball extends ball{

         public void place(){ System.out.println("basketball place"); }

}

public class volleyball extends ball{

         public void place(){ System.out.println("volley place"); }

}

然后我们想把这些球放到球柜里面,定义下面的list

List<ball> ballplace = new ArrayList<ball>();

运用向上造型:

Ball a = new football();

Ball b = new basketball();

Ball c = new volleyball();

ballplace.add(a);

ballplace.add(b);

ballplace.add(c);

这样就将足球,篮球,排球的集体球放进去了。不然就要定义足球柜,篮球柜,排球柜。要是有更多的就会定义很多集合。这样不堪设想。

想一想我们前面说的向上造型后,子类的各自的特有方法就没有了。那么我们从集合里面取出a,b,c的时候我们有想使用子类的特有方法怎么办呢!这里我们就用到了向下造型。取出a,b,c对象后用向下造型将它们转化成football,basketball,volleyball。这样就能用它们各自自己的方法了。这也是向下造型的具体用处。

 

 

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
D
粉丝 0
博文 1
码字总数 731
作品 0
丰台
程序员
Java中关于子类成员变量与父类成员变量同名的问题

重写和重载是针对方法的,子类的变量可以覆盖父类的变量,但是不能改变父类的变量。 打印结果: Animals enjoy! 10 Dog enjoy! 20 Dog enjoy! 10 20 由此可见,父类和子类的变量是同时存在的...

仟昭
07/02
0
0
UG编程加工实例之创建槽轮三维造型及加工仿真。

        操作步骤   1、创建槽轮造型   (1)建立新文件,输入文件名(拼音或英文字母)。   (2)在菜单栏单击[建模],进入建模模块。   (3)在工具栏单击[草图]按钮,选择[XC...

UG数控编程
05/19
0
0
章子怡范冰冰的光头照,实在看不下去了

《演员的诞生》预告里,章子怡光头照曝光,看样子是要演个机器人。 讲真,第一次见章子怡这样的造型还真是会吓一跳。不知道是不是真的太丑,章子怡一向铁娘子性格居然快崩溃大哭。 不过还是范...

拉米拉科技
2017/12/05
0
0
UG编程-零件造型设计与编程,值得学习!

  1 零件主体在UG中三维的造型   1.1 新建UG文件   1.2 建模         1.3 创建毛坯      2 零件在UG中的加工   2.1 加工初始化   2.1.1 起始加工         2.2 刀具...

UG数控编程
05/11
0
0
2017洛杉矶车展:日产家族星战特别版

日前,日产正式在洛杉矶车展发布了6款星战特别版车型,分别基于西玛、逍客、奇骏、天籁等车型打造,新车外观选择了基于人物造型的设计理念,以满足年轻人对于时尚的追求。 星战特别版车型 整...

常启蒙
2017/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6 取余运算

python中取余运算逻辑如下: 如果a 与d 是整数,d 非零,那么余数 r 满足这样的关系: a = qd + r , q 为整数,且0 ≤ |r| < |d|。 经过测试可发现,python3.6中取余运算得到的 r 是正整数;...

colinux
16分钟前
1
0
[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
3
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
3
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
1
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部