Java多态中的引用类型转换

引用类型转换;

1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换;

2.向下类型转换(强制类型转换),是大类型到小类型的转换;

3.instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题;

  向上类型转换是没有风险的,可以类比为一个杯子里的水倒入一个壶里(当然这个壶肯定容量比杯子要大),但是向下类型转换是有风险的,这就相当于一壶水向杯子里倒,肯定会有溢出。

举一个例子;

Initail.java:

package com.test;public class Initail {public static void main(String[]args){Dog dog = new Dog();//先用子类的引用指向这个对象Animal animal = dog;//自动类型提升 向上类型转换Dog dog2 = (Dog)animal;//向下类型转换 强制类型转换但是存在风险 Cat cat =(Cat)animal;//1.编译时Cat类型2.运行时Dog类型所以不能执行
    }
}

运行失败:

修改后的Initial.java:

package com.test;public class Initail {public static void main(String[]args){Dog dog = new Dog();//先用子类的引用指向这个对象Animal animal = dog;//自动类型提升 向上类型转换if(animal instanceof Dog){}else{System.out.println("无法进行类型转换 转换Dog类型");}if(animal instanceof Cat){Cat cat = (Cat)animal;//1.编译时Cat类型2.运行时Dog类型所以不能执行}else{System.out.println("无法进行类型转换 转换为Cat类型");}}
}

Cat.java:

package com.test;public class Cat extends Animal{
}

Dog.java:

package com.test;//Dog对象继承于Animal类
public class Dog extends Animal{public int age = 20;public void method(){eat();}}

运行结果为:

转载于:https://www.cnblogs.com/pureqh/p/9170458.html

Java学习笔记二十六:Java多态中的引用类型转换相关推荐

  1. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  2. JVM 学习笔记二十六、JVM监控及诊断工具-GUI篇

    二十六.JVM监控及诊断工具-GUI篇 1.工具概述 使用上一张命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但他们存在下列局限: (1)无法获取方法级别的分析数据,如方法间的调用关系 ...

  3. java中的多态与继承_【Java学习笔记之十六】浅谈Java中的继承与多态

    1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类更具体.父类具有更 ...

  4. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

  5. Java学习笔记二十二:Java的方法重写

    Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...

  6. 【Java学习笔记二】继承和多态

    与C++不同的是,在Java中,一个类只能直接继承另一个类,而不允许继承多个类,这个新类称为继承类.派生类或者子类,而被继承的类称为基类或者父类. 继承类能够继承基类的群不属性和行为. 面向对象程序设 ...

  7. JAVA学习笔记(二十)- 集合 List

    ArrayList 集合 /** ArrayList,实现List接口* 声明数组时必须指定数组中元素的类型,可以是基本数据类型,也可以是引用数据类型* 声明集合时可以不指定其元素的类型,元素类型默认 ...

  8. Java学习笔记<十六>(树形结构存储)

    1.树形结构的介绍 * 树形结构简介  * 树形结构是一种非线性结构,存储的是"一对多的"关系的数据元素的集合  *  * 树形结构的相关术语:  * 节点(Node):使用树结构 ...

  9. Java学习笔记(十六)—— 开发个小项目(GoBang4.0)

    接十二,今天重点搞定简单基础版本的AI下棋. 画个大纲(跟随慢慢开发过程不断完善) 1.用户 两个用户对战  一黑一白 用户可以是人,也可以是AI.对战模式支持人人,人机,机机. 属性 本次比赛执棋颜 ...

最新文章

  1. 通过构建DCA(Decision Curve Analysis)模型、获取模型数据并使用python进行绘图
  2. java c 序列化_Java 序列化
  3. C++对象模型探索 / 普通类对象占用的空间
  4. Java|C++工作笔记-控制台带参数运行程序
  5. 【英语学习】【English L06】U04 Adventure L6 My favorite tourist destination
  6. Mysql的int和bigint字段类型,映射到Java的Integer和Long类型时,勾选UNSIGNED无符号会导致越界转换。
  7. 个推 Spark实践教你绕过开发那些“坑”
  8. mysql utf8转gbk cmd_修改xampp的mysql数据库utf8mb4为gbk以解决cmd内中文显示为问号
  9. 怎么写c++ documentation_球鞋鞋标怎么看真假、有几种 耐克鞋标鉴定方法推荐
  10. “格力手机”的蝴蝶效应
  11. 数据挖掘案例:建立客户流失模型
  12. mysql卸载不干净
  13. JavaScript实现视频播放器
  14. 【mcuclub】舵机-SG90
  15. 微信小程序中的 tabBar
  16. Mac上制作Linux U盘启动盘
  17. matlab中clear;close;clc的作用说明
  18. idea设置黑色经典样式Darcula
  19. ShaderToy Matlab OpenGL实现流动Love
  20. win11 跳过检测直接升级

热门文章

  1. boost::interprocess::wmanaged_external_buffer用法的测试程序
  2. boost::hana::none用法的测试程序
  3. boost::endian::detail::is_scoped_enum用法的测试程序
  4. Boost:bzip2解压缩器
  5. VTK:Utilities之UnknownLengthArray
  6. VTK:Medical之GenerateCubesFromLabels
  7. VTK:InfoVis之GraphPoints
  8. VTK:图片之ImageMandelbrotSource
  9. OpenCV相位校正phase corr的实例(附完整代码)
  10. QDoc特殊内容special content