向上转型与向下转型详解
让我们先来了解一下,怎么用转型。
转型
要转型,首先要有继承。继承是面向对象语言中一个代码复用的机制,简单说就是子类继承了父类中的非私有属性和可以继承的方法,然后子类可以继续扩展自己的属性及方法。
向上转型: 通过子类对象 (小范围) 实例化父类对象 (大范围) , 这种属于自动转换
- Father f = new Son();
向下转型: 通过父类对象 (大范围) 实例化子类对象 (小范围) , 这种属于强制转换
- Son s = (Son) f;
总结:
向上/下转型示例
向上/下转型示例
思考下面代码:
- B b = new B() -----> A b = new B(); 为什么要这样做?
- 向下转型的使用
package exercise;class Bicycle extends Cycle {public Bicycle() {// TODO Auto-generated constructor stubSystem.out.println("Bicycle()");}public void ride() {System.out.println("Bicycle ride!!!");}public void balance() {System.out.println("Bicycle-->balance()");}
}class Unicycle extends Cycle {public Unicycle() {// TODO Auto-generated constructor stubSystem.out.println("Unicyle");}public void ride() {System.out.println("Unicycle ride!!!");}public void balance() {System.out.println("Unicycle-->balance()");}
}class Tricycle extends Cycle {public Tricycle() {// TODO Auto-generated constructor stubSystem.out.println("Tricycle()");}public void ride() {System.out.println("Tricycle ride!!!");}// 此处没有balance方法
}class Cycle {public Cycle() {// TODO Auto-generated constructor stub
// System.out.println("Cycle()");}public void ride() {System.out.println("Cycle ride!!!");}
}/***************************************************************************************************//***************************************************************************************************/public class Upcasting {public static void ride(Cycle c) {c.ride();}public static void main(String[] args) {//第一波Cycle cycle = new Cycle(); // 没有向上转型cycle.ride();
// cycle.balance(); //Cycle没有balance方法Cycle bicycle = new Bicycle();// Upcastbicycle.ride();((Bicycle) bicycle).balance();// downcastCycle tricycle = new Tricycle();// Upcast//((Bicycle) tricycle).balance();// 如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错.// 但是运行时会出现java.lang.ClassCastException错误。System.out.println("=======================================");//第二波--选中一个向上/向下转型的例子进行讲解 // 向上转型System.out.println("向上转型");Cycle unicycle = new Unicycle();// Upcastunicycle.ride();
// unicycle.balance(); //向上转型之后,则不能调用父类没有而子类有的方法————比如此处给出的balance方法 // 此处为不转型System.out.println("\n此处为不转型");Unicycle unicycle1 = new Unicycle();unicycle1.ride();unicycle1.balance();// WDFC 明明Unicycle unicycle1 = new Unicycle();这样直接来就什么都能调用。// 我本来就是要拓展父类才创建的子类,你给我向上转型后,子类拓展方法不能用了,我转型有个屁用???// 向下转型System.out.println("\n向下转型:"); // 这里先再次强调一下:向下转型需要先向上转型((Unicycle) unicycle).balance(); // 向下转型是强制类型的// 进入正文,再次WDFC// 本来直接new不就好了// 转型干什么(向上向下转来转去,一脸懵逼),劳神伤财又费力// --------N次学习后// 我突然发现,转型实在是太牛批了!// 一直以来,都是我的转型例子太简单了,所以看上去转型就是在浪费时间。// 请看下面,来一个简单复杂且牛批的代码。//第三波System.out.println("\n\n=======================================");ride(new Cycle()); // No upcastingride(new Unicycle()); // Upcastride(new Bicycle()); // Upcastride(new Tricycle()); // Upcast}
}
返回上层目录
返回目录
向上转型与向下转型详解相关推荐
- 类中的向上转型与向下转型详解
我们的类与类之间会存在继承关系,子类继承父类,一个父类可以有多个子类,例如Animal类就可以有Cat子类,Dog子类,等等.那么我们在运用的时候根据不同的场景会出现向上转型和向下转型的情况. 一.向 ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
- 重新精读《Java 编程思想》系列之向上转型与向下转型
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...
- Day11多态部分-6 【1.3 对象的向上转型和向下转型】
[1.3 对象的向上转型和向下转型] + - 向上转型 子类对象赋值给父类类型的引用时 会自动将子类对象对应的类型 提升为父类类型 语法: 父类类型 引用 = new 子类的构造方法(); 特点: 此 ...
- 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型
学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...
- Java转型(向上转型和向下转型)
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...
- 【转】面向对象之多态(向上转型与向下转型)
转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...
- 三分钟带你搞懂什么是向上转型和向下转型
什么是向上转型? 通过在网上查了资料,和普遍的介绍,一句话总结就是"父类引用指向子类对象",例: Human h=new Human(); h.eat();//人类 Animal ...
- [JAVA]向上转型与向下转型
要理解多态性,首先要知道什么是"向上转型"."向下转型". 对象的多态性:父子类对象的转换 **向上转型:**子类对象变为父类对象,语法: 父类 父类对象 = ...
- 关于向上转型和向下转型
原理: 关于向上转型和向下转型: 对象类型的方法与对象的关联是通过指针来完成的,比如: Super sup = new Super(); 单从方法而言,在构造结束后,sup对象内部会有一个指向存储在堆 ...
最新文章
- 企业名片小程序时代,打破纸质名片局限!
- php获得指定位置中间的数据库,PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结...
- Notepad++中的高级查找
- [BUUCTF-pwn]——others_shellcode
- hdoj3351-stack
- python列表数据类型-入门学习
- 2.3 快速搭建你的第一个系统,并进行迭代
- linux下图片加密原理,Linux中常见的加密技术介绍
- 生意场逃不开三个关键词:留存、转化、数据
- Helloworld之Spring依赖注入/控制反转(DI/IoC)版
- 华为笔记本电脑安装 Linux 操作系统之Manjaro(手把手教学)
- echarts自动排序_百度echarts 排序问题
- mac上好用的下载器有哪些,mac下载种子用什么软件
- pfamscan 的使用_48个在线分析使用工具
- Java基础-数组01
- 用java设计一个三角形类_利用Java类库中的Point类设计一个三角形类,编程求三角形面积...
- vue-cli 项目踩坑 npm install 时出错
- word和excel打开速度慢的_解决办法
- python中利用biopython和dssp提取pdb文件中的二级结构
- Dremio数据湖引擎(一):简介
热门文章
- ffmpeg的那点小事儿--ffmpeg的导入和视频解码,YUV保存(ffmpeg4.0.2)
- java异步回调讲解
- Problem E.可口可乐
- Azure AKS、ACR访问
- 地球罕见的九大自然现象
- windows 找不到文件'gpedit.msc'.请确定文件名是否正确后 windows10 家庭版 打不开组策略 不想更新 不想换版本
- 利用钩子技术控制进程创建
- “速课小龙”项目冲刺
- 各种网客平台纷纷兴起,你进入到哪个网客领域了?
- 2016hctf Writeup.md