疯狂java讲义---多态,强制类型转换,向上转型

SDM660电源部分配置: SDM660电源部分配置: Panel power supplies 1、Reference power supplies Description Name Regulator Voltage (V) Panel power supply 0 vddio PMIC 660/L11 1.8 Panel power supply 1 Lab PMIC 660/lab 4.6 Panel power s... 阅读详情
多态概念:

 Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。

代码示例:
class BaseClass
{
	public int book = 6;
	public void base()
	{
		System.out.println("父类的普通方法");
	}
	public void test()
	{
		System.out.println("父类的被覆盖的方法");
	}
}
public class SubClass extends BaseClass
{
	//重新定义一个book实例变量隐藏父类的book实例变量
	public String book = "轻量级Java EE企业应用实战";
	public void test()
	{
		System.out.println("子类的覆盖父类的方法");
	}
	public void sub()
	{
		System.out.println("子类的普通方法");
	}
	public static void main(String[] args)
	{
		// 下面编译时类型和运行时类型完全一样,因此不存在多态
		BaseClass bc = new BaseClass();
		// 输出 6
		System.out.println(bc.book);
		// 下面两次调用将执行BaseClass的方法
		bc.base();
		bc.test();
		// 下面编译时类型和运行时类型完全一样,因此不存在多态
		SubClass sc = new SubClass();
		// 输出"轻量级Java EE企业应用实战"
		System.out.println(sc.book);
		// 下面调用将执行从父类继承到的base()方法
		sc.base();
		// 下面调用将执行从当前类的test()方法
		sc.test();
		// 下面编译时类型和运行时类型不一样,多态发生
		BaseClass ploymophicBc = new SubClass();
		// 输出6 —— 表明访问的是父类对象的实例变量
		System.out.println(ploymophicBc.book);
		// 下面调用将执行从父类继承到的base()方法
		ploymophicBc.base();
		// 下面调用将执行从当前类的test()方法
		ploymophicBc.test();
		// 因为ploymophicBc的编译类型是BaseClass,
		// BaseClass类没有提供sub方法,所以下面代码编译时会出现错误。
		// ploymophicBc.sub();
	}
}

 当把一个子类对象直接赋给父类引用变量时,例如上面的BaseClass ploymophicBc = new SubClass();,这个ploymophicBc引用变量的编译时类型是BaseClass,而运行时类型是SubClass,当运行时调用该引用变量的方法时,其方法行为总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量,调用同一个方法时呈现出多种不同的行为特征。
 与方法不同的是,对象的实例变量并不具备多态性。比如上面的ploymophicBc引用变量,程序中输出它的book实例变量时,并不是输出SubClass类里的定义的实例变量,而是输出BaseClass类的实例变量。

注意事项:

  • 引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。因此,编写Java代码时,引用变量只能调用声明该变量时所用类里包含的方法。例如,通过Object p = new Person()代码定义一个变量p,则这个p只能调用Object类的方法,而不能调用Person类里定义的方法。
  • 通过引用变量来访问其包含的实例变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量。

向上转型:

 因为子类其实是一种特殊的父类,因此Java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,或者被称为向上转型(upcasting),向上转型由系统自动完成。


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

 编写Java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的对象确实包含该方法。如果需要让这个引用变量调用它运行时类型的方法,则必须把它强制类型转换成运行时类型,强制类型转换需要借助于类型转换运算符。
 类型转换运算符是小括号,类型转换运算符的用法是:(type)variable,这种用法可以将variable变量转换成一个type类型的变量。

强制类型转换注意事项:

  • 基本类型之间的转换只能在数值类型之间进行,这里所说的数值类型包括整数型、字符型和浮点型。但数值类型和布尔类型之间不能进行类型转换。
  • 引用类型之间的转换孩子能在具有继承关系的两个类型之间进行,如果是两个没有任何继承关系的类型,则无法进行类型转换,否则编译时就会出现错误。如果试图把一个父类实例转换成子类类型,则这个对象对象必须实际上是子类实例才行(即编译时类型为父类类型,而运行时类型是子类类型),否则将在运行时引发ClassCastException(强制类型转换错误)异常。

强制类型转换(也有人说是向下转型)与向上转型说明:

 当把子类对象赋给父类引用变量时,被称为向上转型,这种转型总是可以成功的,这也从另一个侧面证实了子类是一种特殊的父类,这种转型只是表明这个运用变量的编译时类型是父亲,但实际执行它的方法时,依然表现出子类对象的行为方式。但把一个父类对象赋给子类引用变量时,就需要进行强制类型转换,而且还可能在运行时产生ClassCastException异常,使用instanceof运算符可以让强制类型转换更安全。

LPDDR6与LPDDR5 channel/rank/die/bank技术探讨 阅读详情

相关推荐

多传感器融合SLAM指南:如何结合视觉与激光雷达提升建图精度

本文深入探讨了多传感器融合SLAM技术,详细解析了如何将视觉传感器与激光雷达(特别是3D激光雷达)进行深度融合以提升建图精度与鲁棒性。文章从传感器特性分析、数据同步标定、前端融合策略(松耦合与紧耦合)到后端优化与地图构建,提供了完整的实战指南,并重点介绍了V-LOAM等经典融合框架的核心思想,旨在帮助开发者构建适应复杂动态环境的高精度SLAM系统。

weixin_29056145的博客 535

Java向上转型与向下转型

我们在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型。5.13.1  向上转型我们在现实中常常这样说:这个人会唱歌。在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”。再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类)。我们现实中也经常这样说:麻雀是鸟。这两种说法实际上就是所谓的向上转型,通俗地

ja_II_ck的专栏 1884

英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战:从安全手册到代码集成的避坑指南

本文深入探讨英飞凌AURIX™ TC3xx系列MCU的ISO 26262安全机制实战应用,重点解析锁步核配置、ECC策略优化及SafeTlib库集成中的关键问题。通过代码示例和配置建议,帮助开发者实现ASIL D级别安全性,规避常见陷阱,提升汽车电子系统的功能安全合规性。

weixin_42558093的博客 403

秒懂Java多态的引用类型转换——向上转型、向下转型(强制转型)

多态的转型分为向上转型和向下转型两种 向上转型 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。当父类引用指向一个子类对象时,便是向上转型。 使用格式: 父类类型 变量名 = new 子类类型(); 如:Animal a = new Cat(); 向下转型 父类类型向子类类型向下转换的过程,这个过程是强制的 一个已经向上转型的子类类型,将父类引用转为子类引用,便是向下转型...

henrly的博客 1805

LLC谐振变换器设计实战:从工作原理到参数设计与调试

开关电源设计是电力电子领域的核心技术,其核心目标在于提升效率与功率密度。为实现这一目标,软开关技术应运而生,它通过精心控制开关器件的电压与电流波形,使其在开通或关断瞬间实现零电压或零电流切换,从而从根本上降低开关损耗。LLC谐振变换器正是这一技术的杰出代表,它通过引入谐振网络,巧妙地实现了主开关管的零电压开关和次级整流管的零电流开关。这种拓扑结构在服务器电源、通信设备及高端显示驱动等要求高效率、高功率密度的应用场景中价值显著。本文将以半桥LLC为例,深入剖析其工作模态与增益特性,并系统阐述其参数设计、仿真验

weixin_34129696的博客 559

脑机接口技术介绍、应用与挑战

脑机接口的概念最先于1973年提出,伴随着计算机性能的飞速提高,在美国“人类脑计划”的资金支持下,脑机接口的研究进入了高速发展期。去年年末,我国科技部会议透露:中国将拿出540亿元,推进中国脑计划的发展。同时,这一举措也推动了我国脑机接口的研究发展。 脑机接口属于多学科交叉科技,涉及神经科学、计算机科学、认知科学、控制与信息科学技术、医学等多个学科。技术实现方式是通过信号采集设备从大脑皮层采集脑电信号,经过放大、滤波、A/D转换等处理,转换为可以被计算机识别的信号,然后对信号进行预处理,提取特征信号,再利

weixin_44603934的博客 9132

java 向上转型和向下转型

学习向上转型和向下转型怎么用没多难,但是为什么那样用,我搞了很多次没弄明白。没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法。 首先看下怎么用转型。 要转型,首先要有继承。继承是面向对象语言中一个代码复用的机制,简单说就是子类继承了父类中的非私有属性和可以继承的方法,然后子类可以继续扩展自...

deben0426的专栏 290

新代永久解锁西门子smart S7-200PLC 上传程序步骤

西门子 SMART S7-200 PLC 程序上传步骤 打开编程软件 或左下角依次打开 程序 所有程序 Siemens Automation Simatic STEP 7-MicroWIN SMART V2.4 STEP 7-MicroWIN SMART 技术交流 plcjiesuo1 2. 确认plc电源端以及输入电压; 3.用网线连接plc与电脑技术交流 plcjiesuo1 4.plc通电; 5.打开编程软件,双击通讯 6.按照...

m0_60773720的博客 2万+

java调用自身_Java子类怎么调用自身属性

packagesubclas;classBaseClass//父类{publicintbook=6;publicvoidbase(){System.out.println("父类的普通方法");}publicvoidtest(){System.out.println("父类的被覆盖的方法");}}pub...package subclas;class BaseClass ...

weixin_39657125的博客 479

【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题

【WRF-Urban】使用 CGLC-MODIS-LCZ_100m 数据集运行 WRF 时的城市参数化问题

WW、forever的博客 709

【AI编程】Cursor编程工具使用教程:下载、配置、使用、运行Java项目

【AI编程】Cursor编程工具使用教程:下载、配置、使用、运行Java项目

funfan的博客 5196

java提高篇(十)-----强制类型转换

在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。 当我们用一个类型的...

chenssy 的技术博客 1777

YOLOv11低光照检测性能优化:基于Retinexformer主干网络的深度改进实践

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!@[TOC]在自动驾驶、安防监控、遥感探测等关键领域,目标检测系统必须保证24小时全天候的可靠工作。然而,现有最先进的目标检测模型,包括YOLOv11,其训练数据大多源于光照良好的场景。当环境光照条件急剧下降时,图像会出现严重的噪声、低对比度、颜色失真和细节丢失,直接导致模型性能断崖式下跌。常规的解决方案如图像直方图均衡化或简单的伽马校正,往往收效甚微,甚至可能放大噪声,进一步干扰检测。

m0_71589036的博客 190

【Java16】多态

对面向对象语言来说,所有的对象(Object),或者说类的实例,本质上都是引用变量。因此,多态最主要就是针对对象来说的:声明时引用变量指向的对象的类型,和运行时引用变量指向的对象的类型不一致。即其编译时类型是父类类型,运行时类型是子类类型。那么也可以反过来,执行。引用变量在编译阶段只能调用其编译时类型拥有的方法,但是在运行时可以执行其运行时类型拥有的方法。类型转换运算符可以实现基本类型之间的转型,也能实现引用变量的转型。,这种引用变量的类型在声明它的时候就决定了;,这种变量的类型由实际赋给它的对象决定。

饮冰室 1226

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java类——多态

一、多态性 \quadJava引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时的类型决定,运行时的类型由实际赋值给该变量的对象决定。如果编译时类型和运行时类型不一致,就会出现所谓的多态。 \quad先看一个父类Base和子类Sub的代码,根据其结果做进一步分析: public class Base { public int book = 6; ...

qq_40438165的博客 1534

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java向上转型和向下转型有什么用_向上转型,向下转型,还在头疼?

在学习Java编程中,最头疼事情之一就是数据类型转换。有时候它在不经意之间就完成了(自动类型转换),有时候却又要求程序员必须手动指定(强制类型转换)。基本数据类型,转换规则还可以通过类型本身空间大小和精度分析明白,而且最多就是丢失精度但运行起来至少是不会报错。可是面对引用数据类型,这个“坑”就大了:有自动转的,有强制转的,居然还有强制都转不了的;自动转了的却把对象身上的方法丢了看不见;强制转的编译...

weixin_39618275的博客 161

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《疯狂java讲义》学习(9):多态

多态 Java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量是使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就有可能出现所谓的多态(Ploymorphism)。 多态性 这里有个程序: class BaseClass { public int book=6; public void base() { ...

泛泛之素 841

《疯狂Java讲义精粹》读书笔记2 ------ 多态

-----------------《疯狂Java讲义精粹》2读书笔记---------------   Java引用变量有两个类型:     · 编译时类型(由声明该变量时使用的类型决定)    · 运行时类型(由实际赋给该变量的对象决定)   当编译时类型和运行时类型不一致,就可能出现多态(Polymorphism)。往往是相同类型的变量、调用同一个方法时呈现出多种不同的行为特征...

HouRui2000的博客 161

Java-java疯狂讲义-第五章面向对象(上)-5.7多态

5.7多态 http://c.biancheng.net/view/784.html 位移 https://www.cnblogs.com/laiso/p/9256120.htmljava Integer与int详解 java引用变量分为编译时类型、运行时类型。编译时类型由申明该变量时使用的类型决定,运行时类型由实际赋给的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多...

471

疯狂java讲义_day_04——第五章:重载、重写,多态,继承,访问控制级别

继承 java语言是单继承,C++是多继承 子类扩展了父类,子类是一个特殊的父类 方法重写(override) 方法重写遵循的规则(三同两小一大): ① 三同:方法名相同,形参列表相同,方法类型相同(都是类方法 或 都是实例方法) ② 两小:返回值类型:子类 <= 父类 , 抛出的异常类:子类 <= 父类 ③ 一大:子类方法的访问权限 >= 父类方法的访问权限 其它注意点...

dl674756321的博客 322

向上转型,向下转型

在引用数据类型中,只有有继承关系的类型才能进行类型转换; 类型转换只是转换看待对象的引用的类型,对象本身没有也不可能参与转换; 父类引用可以自动指向子类对象,但只能访问和调用到来自于父类的属性和行为; . 子类的引用不能指向父类或其它子类对象,就算强转也会导致运行失败并抛出ClassCastException; . 把父类引用赋给子类引用,语法上必须使用强制类型转换,要想运行也成功还必须保证父类引用指向的对象一定是该子类对象(最好使用instance判断后,再强转)。 ...

m0_59788935的博客 133

疯狂Java讲义(十)---- 多态

  当把一个子类对象直接赋给父类引用变量时,编译时类型是父类类型,运行时类型是子类类型。当运行时调用该引用变量的方法时,其方法行为总是子类方法的行为,而不是父类方法行为,所以就出现了相同类型的变量,执行同一个方法时出现不同的行为特征,这就是多态。也就是说程序中定义的引用变量所指向的具体类型和通过该引用变量调用方法在编译时不确定,必须等到运行时才能确定。 实现多态的三个必要条件:  继...

weixin_30847271的博客 70

疯狂java讲义

封装: 封装:将对象状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是用类所提供的方法访问和操作。 访问控制符:private(当前类访问权) ,protected(子类访问),public(公共访问),default(包访问) set(),get() 构造器重载,名字相同 ,形参不同。 构造器中调用另一个构造器用this();必须出现在构造器第一行。...

189

Java多态小结

class BaseClass{ public int book=6; public void book(){ System.out.println("父类的普通方法"); } } 面向对象之多态(疯狂Java讲义学习心得) 为什么会出现多态? Java中的引用变量有两个类型,一个是编译时的类型,一个是运行时的类型,编译时

hello,黑豆先生 1255

Java多态

[html] view plaincopyprint? class BaseClass{       public int book=6;       public void book(){               System.out.println("父类的普通方法");       }  }   class BaseClass{ public int book

SmcWjm的专栏 2076

[疯狂Java]面向对象:多态、编译时类型、运行时类型、向上兼容、兼容下反转、instanceof

1. 想明白多态必须先理解两个概念:编译时类型和运行时类型     1) 这两种类型都是针对引用变量的;     2) 编译时类型:          i. 是声明引用变量时的类型;          ii. 例如:String s;  // 那么s的编译时类型就是String     3) 运行时类型:          i. 是引用实际指向的对象的类型,和编译时类型完全没有任何关系

Lirx_Tech的专栏 1616
上一篇: 视频流中ES,PES,PS,TS,RTP概念说明
下一篇: 疯狂java讲义-instanceof运算符
try_learner
博客等级 码龄9年 35粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值