文档章节

向上造型与向下造型

D
 DARK_CS
发布于 2017/04/24 18:02
字数 731
阅读 112
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

分布式块存储的引擎如何设计?

前言: 目前在万兆网络和SSD,包括NVMe SSD 都已经非常普及。随着硬件的速度越来越快,性能的瓶颈会从硬件转移到软件。尤其对于存储引擎来说,性能至关重要。 先来看一下我们会对数据存储引擎...

Java干货分享
刚刚
0
0
docker-compose.yml 配置

docker-compose.yml常用命令 image 指定镜像名称或者镜像id,如果该镜像在本地不存在,Compose会尝试pull下来。 示例: image: java build 指定Dockerfile文件的路径。可以是一个路径,例如...

开心的哈士奇
5分钟前
0
0
Tale的升级真是惊心动魄,吓死人

精心动魄的博客升级计划,Tale 这几天在筹划将分散在其他几个地方的博客统一到这里来,也就留意了tale的更新,发现出现了2.0.1版本; 因此动了升级的念头,唉! 高估了个人开放着的系统规划能...

硅步积千里
15分钟前
0
0
tcc分布式事物

因为最近公司的新退货系统用到了spring cloud。所以会涉及到一些分布式事物。 所以需要先了解一下,分布式事物。 shuaiqiyu / hmily 高性能异步分布式事务TCC框架 谭纳 / spring-cloud-rest-...

miaojiangmin
16分钟前
0
0
20181016 上课截图

小丑鱼00
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部