文档章节

向上造型与向下造型

D
 DARK_CS
发布于 2017/04/24 18:02
字数 731
阅读 117
收藏 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 由此可见,父类和子类的变量是同时存在的...

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

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

UG数控编程
2018/05/19
0
0
系统架构:使用空间结构、运动定律、运动实例三个概念描述

图1 我们试试看图说话: 所有的系统都可以被看待成上图那样,系统中有一类模型可以按照进出分类为两类:Input类和Output类。代码里可以通过为这类对象的模板(类型、class)名称后缀In或Out...

花和尚鲁智深
2015/12/30
301
4
章子怡范冰冰的光头照,实在看不下去了

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

拉米拉科技
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数控编程
2018/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

echarts实现中国地图

最近项目中有个需求:在地图上展示各省市的数据分布,像这样: 项目中接入的图表展示工具是echart,查了echart官网,发现并没有中国地图相关的实现,唯一接近的,只有香港18区人口密度。没办...

Funcy1122
16分钟前
0
0
持续集成工具Jenkins结合SVN的安装和使用

持续集成工具Jenkins结合SVN的安装和使用 2018年06月08日 11:30:23 止步前行 阅读数:2932 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxd1435513775/ar...

linjin200
23分钟前
0
0
ES6 对象的解构赋值

基本用法 1.等号右边如果不是数组,将会报错(不是可遍历结构) 2.解构赋值 var, let, const命令声明均适用 3.set结构也可解构赋值(具有Iterator接口,可采用数组形式结构赋值) set解构:任何...

Jack088
25分钟前
0
0
微信小程序富文本table超出宽度处理

一、微信小程序富文本table超出宽度处理 处理思路: 使用正则删除table中的width属性。 //去除table的宽度content = content.replace(/<table[^>]*>/gi, function (match, capture) { ...

tianma3798
26分钟前
0
0
阿里云全站加速DCDN全面支持WebSocket协议

WebSocket协议可以为网站和应用提供真正的双向通信,具有控制开销、保持连接状态、更强实时性、更好的压缩效果等优点,是当下低延时应用最常采用的一种技术协议。为了更好的满足客户在实时通...

阿里云官方博客
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部