对象的上转型和下转型 (instanceof关键字)
1.对象的上转型,就是多态的一种写法
格式:父类名称 对象名 = new 子类名称();
Animal animal = new Cat();
含义:右侧创建一个子类对象,把它当作父类来使用
向上转型一定是安全的,从小范围到大范围; 猫是动物,动物不一定是猫
类似于:double num = 100
ps:对象一旦向上转型为父类,就无法调用子类特定内容
上转型还可以在参数传递的时候隐型发生:例如 匿名类、子类对象
usbServe(USB usb)
调用时:
1.usbServe(new Keybroad());
2. Keybroad keybroad = new Keybroad();
usbServe(keybroad);
2.对象的下转型,其实就是还原的操作
格式:子类名称 对象名 = (子类名称)父类对象;
含义:将父类对象还原为本来的子类对象
Cat cat = (Cat)animal
类似于:int num = (int)10.0
ps:必须保证创建的时候就是猫,才能下转型成猫,否则会报错 类转换错误 ClassCastException
报错的情况类似于:int num = (int)10.5 //精度损失
下转型时,忘记原来子类是什么时
格式:对象 instanceof 类名称
会得到一个 boolean 值,判断前面对象能不能当作后面类型的实例
例子:
if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.watchHouse();
}
if (animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.catchMouse();
}
对象的上转型和下转型 (instanceof关键字)的更多相关文章
- java上转型和下转型(对象的多态性)
/*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...
- Java学习——上转型与下转型对象
上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法. 下转型:只能是转上去的才能转下去.下转型类似于该子类直接继承父类. pac ...
- Java上转型和下转型
Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting) .向下转型(downcasti ...
- java 向上转型 向下转型
//父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类 public class Parallelog ...
- java基础(十)之向上转型/向下转型
向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...
- JavaSE(五)JAVA对象向上转型和向下转型
今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...
- JAVA对象 向上转型upcasting,向下转型downcasting
1:向上转型 向上转型,就是java多态中的父类引用指向子类对象.但要注意的是 父类引用不可以访问子类新增加的成员(属性和方法) 代码举例: /** * 定义一个父类 */ public class ...
- java 向上转型与向下转型
转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象 ...
- 【JAVA】关于向上转型与向下转型
向上转型: 子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 如果子类重写了父类的方法,就根据这个引用指向调用子类重写的这个方法,不是调用父类的, ...
随机推荐
- CentOS7下升级PHP版本为7.2
yum provides php #自带的只有5.4版本 rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm #更新源 rpm ...
- linux异常
常见报错语句 Command not found; - 找不到命令(敲入的命令有误或者该命令还没安装) No Such file or directory; - 找不到输入的文件或者目录
- yingwen
In older people with mild cognitive impairment,having a drink now and then -- up to an average of on ...
- python3练习100题——009
今天的题目好像有点水... 原题链接:http://www.runoob.com/python/python-exercise-example9.html 题目:暂停一秒输出. 我的代码: impor ...
- js面向对象的程序设计 --- 下篇 继承启蒙
继承是oo语言中一个最为人津津乐道的概念.ECMAScript支持实现继承,而且实现继承只要是靠原型链来实现的 ·原型链 其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法. 简单回顾一 ...
- CSS的布局之文档流,与行内/块级元素的延伸
文档流,即(position:stiatic),是html布局机制的默认状态. 文档流在排列的过程中,块级元素从上到下,行内元素,从左到右. ·块级元素 <div> <h系列> ...
- SpringMvc执行流程及底层代码流程
SpringMVC执行流程 01.客户端发送请求被我们在web.xml中配置DispatcherServlet(核心控制器)拦截: 默认执行DispatcherServlet中的 protecte ...
- UI高级组件
今天继续学习UI高级组件 网格视图 GridView 用GridView标签添加,显示网格视图,需要用到适配器,共有四种适配器 ArrayAdapter,SmipleAdapter,SmipleCou ...
- AcWing 338. 计数问题
#include <iostream> #include <algorithm> #include <vector> using namespace std; ; ...
- ansible笔记(1):ansible基本概念
一.基础概念 1.ansible是什么? ansible是一个配置管理工具,是一个自动化运维工具. 2.ansible能做什么? 它可以完成一组批量化的工作任务,或者经常重复性的工作任务.例如:a.在 ...