当前位置: 首页 > news >正文

[Java基础]对象转型

系列文章目录

【Java基础】Java总览_小王师傅66的博客-CSDN博客

[Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客

[Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客

Java字节码分析快速入门/字节码执行分析(一)_java 字节码_小王师傅66的博客-CSDN博客

[Java基础]面向对象-关键字分析:this,static,final,super_小王师傅66的博客-CSDN博客JVM-运行时数据区_小王师傅66的博客-CSDN博客[Java基础]面向对象-关键字分析:this,static,final,super_小王师傅66的博客-CSDN博客


文章目录

系列文章目录

文章目录

前言

1、向上转型(upcasting)

2、向下转型(downcasting) 

3、实现多态

4、将基本数据类型转换为包装类

5、将字符串转为基本类型或其他类型

总结


前言

        在这篇文章中,我们将继续学习Java基础知识:对象转型。对象转型在Java应用中非常广泛,在这篇文章中,我将系统的为大家梳理一下。


1、向上转型(upcasting)

        指将一个子类类型的对象转型为父类类型,这样可以使其适合父类类型的变量。这是最常见的转型,可以简化代码。

Animal animal = new Cat(); 

2、向下转型(downcasting) 

        指将一个父类类型的对象转型为子类类型,这样可以访问子类特有的属性和方法。但是注意,向下转型时需要做类型检查避免ClassCastException。

Animal animal = new Cat();
Cat cat = (Cat) animal;

这时候,我们就可以通过cat对象访问Cat类中的属性和方法。

那什么时候回抛出ClassCastException呢?

1)向一个实际类型并非为目标类型的对象进行强制类型转换时

Object obj = new Integer(10);
String str = (String) obj; // 这里会抛出ClassCastException异常

2)当一个原本兼容的对象,在运行过程中变成不兼容时进行转换。

Object obj = getObj(); // 返回Integer对象
// 一段代码运行后,obj指向一个String对象
Integer i = (Integer) obj; // 这里会抛出ClassCastException异常

        遇到ClassCastException的时候,要检查转型的代码,确保对象的实际类型与目标类型匹配,避免无效的转换。另外,为避免该异常,可以在转型前使用instanceof操作符检查对象的类型,或者try-catch语句捕获该异常。

3、实现多态

        多态依赖于向上转型和向下转型。向上转型可以使子类对象赋值给父类变量,向下转型可以将父类对象恢复为子类类型。

Animal animal = new Cat(); 
animal.makeSound(); // 调用Cat的方法。因为此时animal在内存中指向Cat类生成的对象

4、将基本数据类型转换为包装类

        通过将基本类型转型为包装类,可以访问包装类的方法。

int i = 1;
Integer num = (Integer) i; 

5、将字符串转为基本类型或其他类型

        通过转型可以将字符串Parses为所需类型。

int i = (int) "123";

总结

        1、一个基类引用类型的对象可以指向其子类的对象;

        2、一个基类的引用不能指向其子类新增的属性和方法;

        3、可以使用 引用类型 instance of 类名的方式来判断该引用类型所指向的对象属于该类还是该类的子类;

        4、子类对象可以当基类对象使用叫做向上转型(upcasting),基类对象可以当做子类对象使用称为向下转型(downcasting)
        所以综上,对象转型在实现多态、转换数据类型以扩展对象功能等方面都有重要作用。同时需要注意转型过程中的可兼容性和安全性。

http://www.lryc.cn/news/128357.html

相关文章:

  • JVM——类文件结构
  • 银河麒麟服务器v10 sp1 .Net6.0 上传文件错误
  • C#实现普通的语音播报
  • django中实现事务的几种方式
  • 【es6】具名组匹配
  • 自然语言处理技术:NLP句法解析树与可视化方法
  • flinksql报错 Cannot determine simple type name “org“
  • e.target.value和 binding.value 区别
  • 软链接与exec进程替换运行路径问题
  • 【Go】锁相关
  • git环境超详细配置说明
  • 使用阿里云服务器搭建PostgreSQL主从架构图文流程
  • Linux的基本权限(文件,目录)
  • 网络编程(12): TCP重传、滑动窗口、流量控制、拥塞控制
  • Docker安装RabbitMQ服务端
  • vueuse常用方法
  • 选择大型语言模型自定义技术
  • 算法概述-Java常用算法
  • CCLINK转MODBUS-TCP网关cclink通讯接线图 终端电阻
  • 香蕉派 BPI-P2 Pro采用RK3308芯片,512M内存,8G存储,支持PoE供电
  • 「隐语小课」拆分学习之“水平拆分学习”
  • WPF--关于Action事件小结
  • 创建一个 React+Typescript 项目
  • Java课题笔记~ 数据提交的方式
  • VUE3给页面添加按钮事件
  • 基于centos7.9通过nginx实现负载均衡以及反向代理
  • 前端原生写自定义旋转变换轮播图
  • linux tomcat server.xml 项目访问路径变更不生效
  • 介绍原型模式:快速构建和复制对象的设计模式
  • Unity的TimeScale的影响范围分析