首先定义父类Animal,所有动物都有一个吃东西的方法;子类Dog还增加了一个叫的功能。

public classAnimal {public voideat() {

System.out.println("eat like an animal");

}

}

public class Dog extendsAnimal {

@Overridepublic voideat() {

System.out.println("eat like an dog");

}public voidbarking() {

System.out.println("dog like barking");

}

}

1、向上转型

向上转型(upcasting):子类引用的对象转换为父类类型。

向上转型转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新方法都会遗失掉,在编译时,系统会提供找不到方法错误。

public classDemo {public static voidmain(String[] args) {//upcasting

Animal animal = newDog();

animal.eat();//animal.barking(); The method barking() is undefined for the type Animal

}

}

2、向下转型

在向下转型过程中,分为两种情况:

情况一:如果父类引用的对象的引用是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。

public classDemo {public static voidmain(String[] args) {

Animal animal= newDog();//情况1

Dog dog1 =(Dog) animal;

dog1.eat();

dog1.barking();//情况2

Dog dog = (Dog) newAnimal();

dog.eat();

}

}

运行结果:

eat like an dog

dog like barking

Exception in thread "main" java.lang.ClassCastException: demo.Animal cannot be cast to demo.Dog

at demo.Demo.main(Demo.java:12)

总结:

1、 父类引用可以指向子类对象,子类引用不能指向父类对象。

2、 向上转型不用强制转型。

3、 向下转型要强制转型。

4、 Upcasting会丢失子类特有方法,子类重写的父类方法有效。

————————————————

版权声明:本文为CSDN博主「犁叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012739535/article/details/45249853

java 向下转型运行时错误_Java向上转型和向下转型相关推荐

  1. java scp 上传文件_java基于Scp实现Linux下远程获取、上传文件

    前不久在项目开发中遇上的一个需求:需要在B机器上将A机器某路径下的文件拷贝到B机器上做保存. 简单分析下来,自己的理解就是:一个RPC,主要就是解决跨域传输文件的问题.在提前能拿到A机器的IP.Por ...

  2. java 向下转型运行时错误_java多态和向下转型问题。

    Q1:运行结果中dog2和dog3的引用都指向Dog,且引用地址都一样,但是为什么dog2为什么就不能用eat(i)方法呢?Q2:为什么运行结果都是true?Q3:我开始是Animalsdog2=ne ...

  3. java移除input焦点_java – Eclipse editText在按下完成后删除焦点(光标)

    我是Eclipse的新手,我必须通过在软键盘中按下完成按钮后清除editText中的焦点来隐藏光标. 我发现此代码适用于其他人: editText.setOnEditorActionListener( ...

  4. java jdk7 环境变量设置_Java JDK7在Windows 8下的环境变量配置

    win8下jdk7环境变量的配置: 单击计算机(Computer),选择属性(Properties),选择高级系统设置(Advanced systems settings), 选择环境变量(Envir ...

  5. java 文件夹下的文件_java读取某个文件夹下的所有文件

    import java.io.FileNotFoundException; import java.io.IOException; import java.io.File; public class  ...

  6. java 下溯造型_Java 的上溯造型和下溯造型以及举例,以及判断参数等指向的类

    (一) 先给出个例子,代码如下: /** * @author WangQun * 动物抽象类 */ abstract class Animal { public abstract void speak ...

  7. java linux创建文件夹_java web工程在linux下创建文件夹和文件

    具体的创建方法参照下面的实例: public class FileTest { public static void main(String[] args) { // 根据系统的实际情况选择目录分隔符 ...

  8. Java获取文件的目录_Java实现读取某个路径下的文件目录

    展开全部 import javax.swing.*; import javax.swing.table.AbstractTableModel; import javax.swing.table.Tab ...

  9. Java读取hdfs目录下所有文件_Java API 读取HDFS目录下的所有文件

    /** * 获取1号店生鲜食品的分类id字符串 * @param filePath * @return */ public String getYHDSXCategoryIdStr(String fi ...

最新文章

  1. 驰骋工作流携手山东金义,实施落地上海光大银行
  2. 神经网络结构设计指导原则——输入层:神经元个数=feature维度 输出层:神经元个数=分类类别数,默认只用一个隐层 如果用多个隐层,则每个隐层的神经元数目都一样...
  3. Android之系统架构
  4. python 使用 os的 popen(‘命令’) 如果命令行输出中 有中文乱码, 提示 'gbk' 无法解析的错误 解决办法
  5. 比excel更好用的免费拖拽报表—JimuReport 1.4.4新特性
  6. Unity4.3 遮挡剔除:基本知识
  7. 【数据库】第四章 JDBC、MyBatis
  8. 一、Java语言基础(3)_流程语句——控制循环结构语句
  9. spring-boot基础知识
  10. Unix环境高级编程代码(实时更新)
  11. 定义m是第一个数,之后的每个数都是前一个的平方根,一共有n个数,计算总和。
  12. Mini-C编译器设计与实现 文档+任务书+评价表+PPT+项目源码
  13. 低阶的Newton-Cotes求积公式 | 梯形求积公式、Simpson求积公式、Cotes求积公式
  14. 《3D Point Cloud Registration for Localization using a Deep Neural Network Auto-Encoder》翻译
  15. 原子弹级别牛股发动机指标软件开发收获
  16. java dismiss_为什么我的dismiss()方法无法关闭自定义警报对话框
  17. 习题11-1 输出月份英文名 (15 分)
  18. 运维必看:低成本数据异地灾备方案
  19. android系统关机广播,Android开机广播和关机广播
  20. QQ授权登录和微信授权登录

热门文章

  1. 使用Kubernetes最常见的10个错误
  2. Unity画线之GL
  3. 王慧文广发英雄帖:组队拥抱新时代 打造中国OpenAI
  4. 金融知识杂记(一) 市盈率 市销率 市净率 逆市操作tips(jhs 0414)
  5. fastdfs 沧海一粟
  6. DAY27.XIA.面向對象
  7. 【国企改革观象台】开展体系化能力建设,筑牢网络安全基石 - 国企十四五安全规划的思考(下)
  8. 【创业@移动互联网】PP租车CEO(学安卓,创业移动互联)
  9. “151秒识别128万张ImageNet图像”背后,腾讯告别技术赛马
  10. MIT TR 35揭晓:阿里巴巴王刚、吴翰清等六位华人当选,Ian Goodfellow上榜