java的向下转型_Java 向上/向下转型浅析
基于java的继承,向上或者向下转型是一种常见的情景,在thinking in java对这一情况进行了详细说明,见以下例子:
class Useful {
public void f() {}
public void g() {}
}
class MoreUseful extends Useful {
public void f() {}
public void g() {}
public void u() {}
public void v() {}
public void w() {}
}
public class RTTI {
public static void main(String[] args) {
Useful[] x = {
new Useful(),
new MoreUseful()
};
x[0].f();
x[1].g();
// Compile time: method not found in Useful:
//! x[1].u();
((MoreUseful)x[1]).u(); // Downcast/RTTI
((MoreUseful)x[0]).u(); // Exception thrown
}
}
在以上例子内,x[0],x[1]在对象实例化时,均向上转型,但是其子类是不一样的。因此在进行向下转型时,调用原本不存在的方法,则会报错,见下面第二行代码:
((MoreUseful)x[1]).u(); // Downcast/RTTI ((MoreUseful)x[0]).u(); // Exception thrown
这个涉及到Run-Time Type Information(RTTI)概念。由于java在编译时很难确切知道一个类的实际类型,那么在代码运行期间,则会进行类型检查,若类型相符则正常运行,类型异常则抛出ClassCastException.
如果想知道一个类是否可以进行向下转型,可以使用instanceof方法进行判断,
return (x[1] instanceof Useful) ? 1 : 0;
结果返回1.
看了上面的例子,就可以大概了解转型这个概念。实际上,转型在日常开发中使用的很多,比如以下代码:
List stringList = new ArrayList<>();
其实这也是转型。由ArrayList向上转型为List,只不过平时写的太6了,没感觉到而已。
java的向下转型_Java 向上/向下转型浅析相关推荐
- java 向上转型_java向上转型和向下转型
转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象 ...
- java 泛型向下转型_Java向上转型和向下转型(附具体样例)
Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { pu ...
- java向上转型_Java向上转型
向上类型转换: 1.可以通过父类引用变量调用的方法是子类覆盖或继承父类的方法. 2.父类引用变量无法调用子类新增成员变量和新增成员方法. 举个例子 public classAnimal { publi ...
- java struts2上传文件_java Struts2框架下实现文件上传功能
本文实例为大家分享了struts2框架实现文件上传的方法,供大家参考,具体内容如下 struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 xmlns ...
- java扫描指定package注解_java获取包下被指定注解的类
方案一: 采用reflections 框架(此框架依赖com.google.guava) 2.项目依赖 org.reflections reflections 0.9.11 com.google.gu ...
- java 使用class转型_java中向上转型(upcast)和向下转型(downcast)
先看下面的程序: class Useful { int value = 20; public void f() {System.out.println("f() in the Useful ...
- java 对象向上转型_JAVA对象向上转型和向下转型
今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...
- 重新精读《Java 编程思想》系列之向上转型与向下转型
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...
- Java中的向下转型与向上转型
java转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting).向下转型(downcasting ...
最新文章
- MVC3+EF4.1学习系列(一)-------创建EF4.1 code first的第一个实例(强转)
- 计算机网络实验ifconfig,《计算机网络》操作系统网络配置实验.doc
- 根据经纬度显示地图轨迹
- CLR VIA C#(一)
- 曝光!人工智能行业薪酬到底有多高?
- 强化学习实战(二)ubuntu16.04安装Anaconda、Gym和 Universe
- 传输层协议(3):TCP 连接(中)
- Prokka:从安装到使用的那些坑!!!
- Vue+Element动态生成新表单并添加验证
- ggcor |相关系数矩阵可视化
- android 模拟器 驱动,【新手指导】模拟器报错列表及解决办法!
- 怎样修复win7无线服务器,win7开启无线服务器
- PCIE高性能RAID固态存储卡
- mac电脑忘记账户名密码解决方法
- Mac“终端”的键盘快捷键大全
- java怎么添加商品信息_Javaweb网上商城项目实战(20)添加商品到购物车
- 文件上传个人bypass总结
- java游戏 动态录入弹球_动态弹球的实现 加入了多线程技术--javaSE游戏准备工作...
- 第八诫:当尊重公司领导和同事
- 5个UI设计师必备的Figma汉化插件
热门文章
- zz 彩色转灰度算法
- 通过京东商品ID获取京东优惠券信息,京东优惠券信息接口,京东优惠券API接口,接口说明接入方案
- 用友系统服务器,用友财务系统需要什么云服务器
- No qualifying bean of type found for dependency: expected at least 1 bean which qualifies as autowir
- 计算机中的数值和信息编码有哪些,[转载]信息编码 (数值型和字符型编码)...
- 招商银行信用卡2019届实习笔试题
- Nginx基础应用——日志切割
- python绘制气象等值线图_气象要素场等值线图自动绘制
- Excel 属性及方法
- C++常见面试题总结