基于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 向上/向下转型浅析相关推荐

  1. java 向上转型_java向上转型和向下转型

    转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象 ...

  2. java 泛型向下转型_Java向上转型和向下转型(附具体样例)

    Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { pu ...

  3. java向上转型_Java向上转型

    向上类型转换: 1.可以通过父类引用变量调用的方法是子类覆盖或继承父类的方法. 2.父类引用变量无法调用子类新增成员变量和新增成员方法. 举个例子 public classAnimal { publi ...

  4. java struts2上传文件_java Struts2框架下实现文件上传功能

    本文实例为大家分享了struts2框架实现文件上传的方法,供大家参考,具体内容如下 struts2的配置过程 (1)在项目中加入jar包 (2)web.xml中filter(过滤器)的配置 xmlns ...

  5. java扫描指定package注解_java获取包下被指定注解的类

    方案一: 采用reflections 框架(此框架依赖com.google.guava) 2.项目依赖 org.reflections reflections 0.9.11 com.google.gu ...

  6. java 使用class转型_java中向上转型(upcast)和向下转型(downcast)

    先看下面的程序: class Useful { int value = 20; public void f() {System.out.println("f() in the Useful ...

  7. java 对象向上转型_JAVA对象向上转型和向下转型

    今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...

  8. 重新精读《Java 编程思想》系列之向上转型与向下转型

    前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...

  9. Java中的向下转型与向上转型

    java转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting).向下转型(downcasting ...

最新文章

  1. MVC3+EF4.1学习系列(一)-------创建EF4.1 code first的第一个实例(强转)
  2. 计算机网络实验ifconfig,《计算机网络》操作系统网络配置实验.doc
  3. 根据经纬度显示地图轨迹
  4. CLR VIA C#(一)
  5. 曝光!人工智能行业薪酬到底有多高?
  6. 强化学习实战(二)ubuntu16.04安装Anaconda、Gym和 Universe
  7. 传输层协议(3):TCP 连接(中)
  8. Prokka:从安装到使用的那些坑!!!
  9. Vue+Element动态生成新表单并添加验证
  10. ggcor |相关系数矩阵可视化
  11. android 模拟器 驱动,【新手指导】模拟器报错列表及解决办法!
  12. 怎样修复win7无线服务器,win7开启无线服务器
  13. PCIE高性能RAID固态存储卡
  14. mac电脑忘记账户名密码解决方法
  15. Mac“终端”的键盘快捷键大全
  16. java怎么添加商品信息_Javaweb网上商城项目实战(20)添加商品到购物车
  17. 文件上传个人bypass总结
  18. java游戏 动态录入弹球_动态弹球的实现 加入了多线程技术--javaSE游戏准备工作...
  19. 第八诫:当尊重公司领导和同事
  20. 5个UI设计师必备的Figma汉化插件

热门文章

  1. zz 彩色转灰度算法
  2. 通过京东商品ID获取京东优惠券信息,京东优惠券信息接口,京东优惠券API接口,接口说明接入方案
  3. 用友系统服务器,用友财务系统需要什么云服务器
  4. No qualifying bean of type found for dependency: expected at least 1 bean which qualifies as autowir
  5. 计算机中的数值和信息编码有哪些,[转载]信息编码 (数值型和字符型编码)...
  6. 招商银行信用卡2019届实习笔试题
  7. Nginx基础应用——日志切割
  8. python绘制气象等值线图_气象要素场等值线图自动绘制
  9. Excel 属性及方法
  10. C++常见面试题总结