java引用类型转换(重要)

Java引用类型转换:向上转型与向下转型深度解析 Java引用类型转换与多态机制 Java中的引用类型转换分为向上转型和向下转型。向上转型是安全的隐式转换,如Object obj = new String();向下转型则需显式声明,如String s = (String) obj,并使用instanceof检查类型安全。 多态机制使得父类引用可指向子类对象,运行时调用实际类型的方法重写版本。Java 14+的模式匹配语法instanceof String str进一步简化了安全类型检查。 数组转换存在协变风险,可能导致运行时异常。合理使用泛型可避免大部分转 阅读详情

https://www.cnblogs.com/xiyangcai/p/8126562.html

java的引用类型转换分为两种:

  1. 向上类型转换,是小类型到大类型的转换
  2. 向下类型转换,是大类型到小类型的转换

现存在一个Animal动物类,猫子类和狗子类继承于Animal父类;

复制代码
 1 public class Animal {
 2     private String name;
 3 
 4     public String getName() {
 5         return name;
 6     }
 7 
 8     public void setName(String name) {
 9         this.name = name;
10     }
11     
12     public void eat() {
13         
14     }
15 }
16 
17 public class Cat extends Animal {
18     public void eatFish() {
19         System.out.println("猫吃鱼");
20     }
21 }
22 
23 public class Dog extends Animal {
24     public void eatBone() {
25         System.out.println("狗吃骨头");
26     }
27 }
复制代码

  实例化一个cat对象,如下:

复制代码
 1 Cat cat1 = new Cat();   //使用子类引用实例化子类对象
 2 
 3 Animal cat2 = cat1; 
 4 //此时为向上引用转换,小类型转换为大类型,并没有风险
 5 
 6 //Cat cat3 = cat2;   //报错
 7 //由于cat2已经是Animal类的引用,所以此时为向下引用转换,即大类型转换为小类型,有数据溢出的风险
 8 //虽然有风险,但也可以强制转换
 9 Cat cat3 = (Cat)cat2;  //强制转换成功
10 
11 //Dog dog1 = cat2;         //因为子类不同所以不能这样引用
12 //Dog dog1 = (Dog)cat2; //即使强制转换也不行
复制代码

  虽然向下引用转换会存在风险,但是可以利用java的instanceof关键字去解决这个问题。instanceof运算符用法:判断是一个实例对象是否属于一个类,是返回true,否则返回false。这样我们可以优化上面的代码避免强制转换类型时出现的问题:

复制代码
 1 /**  
 2 * instanceof运算符用法  
 3 * 运算符是双目运算符,左面的操作元是一个对象,右面是一个类.当  
 4 * 左面的对象是右面的类创建的对象时,该运算符运算的结果是true,否则是false  
 5 *   
 6 * 说明:(1)一个类的实例包括本身的实例,以及所有直接或间接子类的实例  
 7 * (2)instanceof左边操作元显式声明的类型与右边操作元必须是同种类或右边是左边父类的继承关系,  
 8 * (3)不同的继承关系下,编译出错  
 9 */         
10 if(cat2 instanceof Dog) {
11     Dog dog = (Dog)cat2;
12 }else {
13     System.out.println("并不能转换");
14 }
复制代码

  但是当子类实例对象统一放进父类引用对象数组时,若要使用子类中的方法,必须先向下转换类型为子类引用,不然编译器会报错

复制代码
 1 Animal[] animals = {
 2     new Cat(),
 3     new Dog()
 4 };
 5 
 6 
 7 //animals[1].eatFish();   //报错
 8 if(animals[1] instanceof Cat) {
 9     Cat cat = (Cat)animals[1];
10 }
复制代码

Java中引用类型转换和多态性的深入探讨 本文深入探讨了Java中的引用类型转换和多态性,包括不同类型的变量如何引用同一个对象、引用转换与数值转换的不同、以及如何在多态性环境下安全地处理对象。文章通过实际代码示例和理论解释,阐述了在Java中引用的转换与数值转换的区别,以及在不同类型的对象引用间进行转换的场景和方法。此外,文章还探讨了多态性在Java中的作用和重要性,以及如何利用多态性简化代码并提高程序的灵活性。 阅读详情

相关推荐

Windows平台无人机仿真:从零搭建SITL环境与QGC联调

本文详细指导了在Windows平台上从零搭建无人机软件在环(SITL)仿真环境,并与QGroundControl(QGC)进行联调的完整流程。通过使用Cygwin工具链,开发者可以在没有实体硬件的情况下,模拟运行ArduPilot飞控,并通过MAVLink协议连接QGC地面站进行全功能测试,为无人机软件开发提供了一个安全、经济的虚拟沙盒环境。

weixin_29239279的博客 407

引用数据类型之间的转换 [Java]

引用数据类型之间的转换 1.引用数据类型转换和基本数据类型转换一样也是分为两种: 第一种:自动类型转换 第二种:强制类型转换 自动类型转换:自动类型转换主要是指从小范围到大范围的转换 强制类型转换:主要是指从大范围到小范围的转换(也就是父类到子类的转换) 如果是小转大则不能使用强制类型转换,使用了就会编译出错 2.引用类型的转换必须要是发生在自己和自己或者父子类之间(也可以是爷孙关系,也就是必须要有继承关系,如果没有继承关系的话就会报错) 3.强制类型转换当中如果转换到的类型时引用指向的子类类型,但不是

m0_57001006的博客 2391

Thompson Sampling vs UCB:5个真实业务场景下的算法选型指南

本文深入对比了Thompson Sampling与UCB算法在电商推荐、在线广告、医疗试验、金融定价和游戏调整五大真实业务场景下的表现。通过量化指标分析,为技术决策者提供了清晰的选型指南:Thompson Sampling凭借其概率匹配和贝叶斯框架,在需要快速收敛、处理冷启动及复杂约束的场景中通常更具优势;而UCB则在要求确定性、可解释性和理论保证的场景下表现更佳。

weixin_29181861的博客 153

基本类型转换和引用类型转换

Java中基本类型转换和引用类型转换

二哈喇子! 1722

汽车软件工程师必看:ASPICE开发流程全解析(附各阶段交付物清单)

本文全面解析了汽车行业广泛采用的ASPICE开发流程,详细介绍了从需求挖掘到系统架构设计、软件工程及测试验证各阶段的关键操作和交付物清单。针对汽车软件工程师,提供了实用的协作指南和工具推荐,帮助团队提升开发效率并降低项目风险,是掌握ASPICE标准的必备指南。

weixin_30733003的博客 638

基于STM32L4XX的环境光传感器(AS7343-DLGMN)应用程序设计

define AS7343_STATUS_SPECTRAL_INT (1 << 3) /* 光谱数据就绪 */#define AS7343_SYS_CFG_SPECTRAL_EN (1 << 1) /* 光谱测量使能 */#define AS7343_SYS_CFG_ALS_EN (1 << 0) /* ALS使能 */#define AS7343_SYS_CFG_INT_EN (1 << 4) /* 中断使能 *//* 切换通道组 (0=组1 F1-F6, 1=组2 F7-F12) */

myron6688的博客 257

C++笔记整理(引用与类型转换)

C++ 引用 、类型转换

weixin_55530858的博客 1657

【GPFS专题4】---IBM Spectrum Scale (GPFS) 原理详解

IBM Spectrum Scale(原名为 GPFS,General Parallel File System)是一种高性能、分布式的集群文件系统,专为大规模数据共享和并行访问设计。它允许多个客户端同时访问共享文件,提供高可用性、容错性和扩展性,广泛应用于高性能计算(HPC)、大数据分析、AI 训练和企业级存储场景。IBM Spectrum Scale 通过分布式架构、并行访问和智能数据管理,为企业提供了高性能、高可用、可扩展的存储解决方案。

jundao1997的专栏 777

java入门---基本数据类型之引用数据类型&数据类型转换

接着上一篇文章来,这次就先看看什么是引用数据类型?首先得满足以下条件: 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。 对象、数组都是引用数据类型。 所有引用类型的默认值都是null。 一个引用变量可以用来引用任何与之兼容的类型。(接口可以引用实现该接口的任意对象) 例子:Site site = new Site("Runo.

顺其自然~专栏 932

Python 爬虫实战:全球渔业船舶捕捞记录数据采集与分析全攻略

通过本项目,我们实现了对全球渔业船舶捕捞记录数据的采集、处理和可视化,为渔业资源管理和海洋生态保护提供了数据支持。未来,可以进一步结合机器学习和深度学习技术,对捕捞行为进行预测和分类,提高对非法捕捞活动的识别能力。

2201_76125261的博客 554

基于Gurobi的综合能源系统运行优化:鲁棒两阶段优化方法

本文提出了一种基于Gurobi的综合能源系统鲁棒两阶段优化方法,针对包含换电站、光伏发电和电池储能的系统运行问题。研究采用多面体不确定性集合描述光伏出力随机性,构建了考虑电池衰减成本和弃光惩罚的两阶段优化模型:第一阶段制定日前调度计划,第二阶段处理实时运行中的不确定性。通过列与约束生成算法求解模型,并使用Python和Gurobi实现。仿真验证了该方法能有效平衡系统经济性与鲁棒性,为含高比例可再生能源的综合能源系统运行提供了实用解决方案。

huanghm88的专栏 240

【Java 基础篇】Java 类型转换

类型转换在Java编程中是一项重要的操作,它允许我们在不同的数据类型之间进行转换。本篇博客详细介绍了Java中的类型转换,包括隐式类型转换和显式类型转换。隐式类型转换是自动进行的,而显式类型转换需要使用强制转换运算符来明确指定转换的目标类型。在进行类型转换时,我们需要注意数据溢出、精度丢失以及引用类型转换的安全性。希望本篇博客对你理解和应用Java的类型转换有所帮助。通过合理和准确地使用类型转换,可以提高程序的灵活性和功能性。

繁依Fanyi的博客 6921

152:vue+leaflet 判断一个点是否在一个电子围栏内

本文介绍了一个基于Vue+Leaflet的示例,演示如何判断点是否在电子围栏内。作者大剑师兰特(优快云知名博主)展示了使用polygon.getBounds().contains(latlng)方法检测点与多边形边界的关系。代码仅需80行,通过点击地图触发判断逻辑,结果显示提示信息。该技术可广泛应用于地理围栏、位置服务等场景,需要安装turf依赖。文章提供了完整源码和配置说明,适合GIS开发者学习参考。

大剑师兰特的GIS世界 756

引用类型的转换 java_Java引用类型转换

java的引用类型转换分为两种:向上类型转换,是小类型到大类型的转换向下类型转换,是大类型到小类型的转换现存在一个Animal动物类,猫子类和狗子类继承于Animal父类;1 public class Animal {2 private String name;34 public String getName() {5 return name;6 }78 ...

weixin_36127981的博客 411

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java 中的引用类型转换详解

向上转型是将子类对象的引用赋给父类类型的引用变量。由于子类是父类的扩展,所以父类能识别子类对象中的父类部分。向上转型是隐式的,不需要显式的类型转换操作符。@Override// 向上转型:将 Dog 对象赋给 Animal 类型的变量// 输出:Dog barks在上面的例子中,dog是Dog类的对象,但它可以被赋值给Animal类型的变量animal,因为Dog是Animal的子类。这种转换不需要显式操作符,称为隐式转换。向下转型是将父类的引用转换回子类的引用。

Rockivy的博客 1298

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java引用类型不能转换,引用类型的转换_Java语言程

引用类型的转换_Java语言程5.6.1 引用类型的转换这里先讨论几个现实生活中的例子,用它们来类比引用类型的转换。汽车驾照分为:A类、B类和C类。其中,持A类驾照人员能驾驶大客车、大货车和小汽车;持B类驾照人员能驾驶大货车和小汽车;持C类驾照人员只能驾驶小汽车。这样,按面向对象的观点,可设计3个类:类LicenseA、类LicenseB和类LicenseC。类LicenseA的直接父类是类Lic...

weixin_42195978的博客 307

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java引用类型的强制类型转换

        正如有时候需要将浮点型的数值转换为整型数值一样,有时候也可能需要将某个类的对象引用转换成两外一个类的对象引用。 进行强制类型转换的唯一原因是:在暂时忽视对象的实际类型之后,使用对象的全部功能。        编写Java程序时,引用类型只能调用声明该变量的类型的方法,也就是编译时类型的方法,不允许调用运行时类型所定义的方法,即使它实际所引用的对象包含该方法。解释一下就是我们说的...

IBLiplus的博客 2898

java引用类型转换带来的多态

引用类型转换带来的多态 父类转子类 需要强制转换,可以使得对象获得子类的方法 父类 People public class People { public void fu(){ System.out.println("fu的函数"); } } 子类 Student public class Student extends People{ public void zi(){ System.

weixin_41998976的博客 164

java引用类型转换

java的引用类型转换分为两种: 向上类型转换,是小类型到大类型的转换 向下类型转换,是大类型到小类型的转换 现存在一个Animal动物类,猫子类和狗子类继承于Animal父类; 1 public class Animal { 2 private String name; 3 4 public String getName() { 5 ...

weixin_30345055的博客 207

引用类型的转换 java_Java中引用类型变量的转换

下面是简单的一个Demo/*测试子父类之间的转换*/class grandfather{void iamgrandfather(){System.out.println("i am grandfather");}}class father extends grandfather{void iamfather(){System.out.println("i am father");}}class s...

weixin_36433524的博客 156

Java引用类型转换

java的引用类型转换分为两种: 向上类型转换,是小类型到大类型的转换 向下类型转换,是大类型到小类型的转换 现存在一个Animal动物类,猫子类和狗子类继承于Animal父类; 1 public class Animal { 2 private String name; 3 4 public String getName() { 5 ...

weixin_34377919的博客 212

Java的引用类型转换

1.基本数据类型转换:   自动类型转换:  把小类型的数据 赋给  大类型的变量. (此时的大和小表示的容量范围)   byte b = 12;  byte是1个字节   int    i   = b;   int是4个字节   强制类型转换: 把大类型的数据赋给  小类型的变量.   short  s =  (short) i ;short是2个字节 2.引用类型的转换: 引用类

杨哥的博客 1492

引用类型的转换 java_java引用类型的强制类型转换

大神的详解:点击打开链接简单总结:1.向上造型:即父类引用指向子类对象,可以自动转换。如:Father father = new Son();这里的引用father指向内存中对象实质还是Son类型,不过对象的功能被临时削弱为father。2.向下转型:即强制类型转换。被向上造型的对象进行强制类型转换是没有问题的:Son son =(Son)father;但是强转没有向上造型的对象会出现错误的:Fa...

weixin_42475535的博客 183

java多态中的引用类型转换

java中的引用类型转换分为两种 一,向上类型转换 向上类型转换公式 //先生成子类对象 Subclass subclass1_1 =new Subclass(); //用父类完成向上类型转换 Agnate agnate =subclass; 完成向上类型转换执行的是父类的方法 2.向下类型转换 直接转型会报错: Type mismatch: cannot convert from Agnat...

QAQyebaiye的博客 298

【Java】引用类型转换和instanceof运算符

基本数据类型转换 自动类型转换:把小类型的数组赋给大类型的变量(此时的大和小表示容量范围) byte b =12 ; //byte是1个字节 int i = b; // int 是4个字节 强制类型转换:把大类型的数据赋给小类型的变量。 int i =12; // int是4个字节 short s = (short) i // short 是2个字节 引用类型的转换 引用类型的大和小,指的是父类和子类的关系 自动类型转换:把子类对象赋值给父类变量(多态) Animal a = new Dog(); /

pangpd的博客 178
上一篇: 线性表 及Java实现 顺序表、链表、栈、队列
下一篇: sql中CONCAT函数使用
周末去看海
博客等级 码龄9年 50粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值