Java(三)对象类型的转换和多态机制

头歌--学习-Java继承和多态之对象类型的转换 头歌实践--学习-Java继承和多态之对象类型的转换 阅读详情

一 对象类型的转换
对象类型的转换在java编程中经常遇到,主要包括向上转型和向下转型。
1.向上转型
可以理解为:父类引用指向子类对象

public class TestPoly {
	public static  void main(String[] args){
		Animal a = new Dog();
		a.shout();
	}
}

class Animal{
	public void shout(){
		System.out.println("叫了一声");
	}
}

class Dog extends Animal{
	public void shout(){
		System.out.println("汪汪汪");
	}
}

class Cat extends Animal {
    public void shout() {
        System.out.println("喵喵喵喵!");
    }
}

其中

Animal a = new Dog();

就是向上转型,父类引用指向子类对象。这是因为狗是动物的一种,是动物的一个实例。那么可以将狗看成是动物的一个对象。

试想一下狗类对象可以作为shout()方法的参数,猫类对象也可以做shout()方法的参数,如果在动物类中的shout()方法中根据不同子类情况设置不同的处理就可以做到在父类中定义一个方方完成各个子类的功能,这样可以使同一份代码用在不同类型上,这是多态机制的基本思想。
之后将对多态进行介绍。

扩展到所有父类子类也是一个道理。

2.向下转型
通过向上转型可以推理出向下转型就是将较抽象的类转换为具体的类。

public class TestPoly {
	public static  void main(String[] args){
		Animal a = new Dog();
		//Dog d = a;//报错。
		Dog d = (Dog)a;//正确
	}
}

将父类对象赋予子类对象,需要强制转换为子类型。简单来理解就是狗是动物,但动物不一定都是狗。父类对象不一定是子类的实例。越是具体的对象具有的特性越多,抽象的对象具有的特性越少,所以在做向下转型是将特性范围小的转换为特性范围大的对象肯定会出问题,需要将父类对象强制转换为某个子类对象,这种转换称为显示转换。

二. 多态
由向上转型原则,狗类对象可以作为shout()方法的参数,猫类对象也可以做shout()方法的参数,如果在动物类中的shout()方法中根据不同子类情况设置不同的处理就可以做到在父类中定义一个方方完成各个子类的功能,这样可以使同一份代码用在不同类型上,很好的解决代码冗余问题。
多态的实现有以下几个条件:
1.多态是方法的多态,不是属性的多态(多态与属性无关)。封装的是属性,属性全部设为private,方法全部设为public。
2.多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。

public class TestPoly {
	public static  void main(String[] args){
		Animal a = new Animal();
		Animalcry(a);
		//Animalcry(new Animal);与上等价
		Animalcry(new Dog());
		Animalcry(new Cat());
		
	}
	public static void Animalcry(Animal a){//多态的条件三:父类引用指向子对对象,实现多态
		a.shout();
	}
/* 如果没有多态,我们这里需要写很多重载的方法。
    * 每增加一种动物,就需要重载一种动物的喊叫方法。非常麻烦。
    static void animalShout(Dog d) {
         d.shout();
    }
    static void animalShout(Cat c) {
        c.shout();
     }*/
 }


class Animal{
	public void shout(){
		System.out.println("叫了一声");
	}
}

class Dog extends Animal{//多态的条件一:继承
	public void shout(){//多态的条件二:方法的重写
		System.out.println("汪汪汪");
	}
}

class Cat extends Animal {
    public void shout() {
        System.out.println("喵喵喵喵!");
    }
}


数字后端零基础入门系列 | Innovus零基础LAB学习Day9 阅读详情

相关推荐

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2681

Java多态的详解

大家好,今天来给大家分享一下Java的多态 Java当中的多态,就是同一方法可以根据发送对象的不同而采用多种不同的行为方式 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多 Java多态存在的条件: 1.有继承关系 2.子类重写父类方法 3.父类引用子类对象 注意一点: 多态指的是方法的多态,属性没有多态这一说 多态可以实现动态编译,增强可扩展性 新建Application 类 package Demo02; public class Application { public stat

weixin_47556601的博客 969

工控上位机开发学习路线与核心技术解析

工控上位机开发是工业自动化领域的关键技术,通过计算机软件实现对工业设备的监控与控制。其核心在于掌握工业通信协议(如Modbus、OPC UA)、数据处理算法和可视化开发三大能力。上位机系统需要高效解析设备通信协议,处理实时数据,并提供直观的人机交互界面。在智能制造浪潮下,掌握C#语言和工业协议开发能力成为工程师的核心竞争力。典型应用场景包括生产线监控、设备远程运维等。本文基于工业现场实践经验,详解从协议解析到界面优化的全链路开发要点,特别针对Modbus协议调优、WPF性能优化等高频问题提供解决方案。

weixin_30376083的博客 550

多态运行怎么区分引用哪个类型/对象

多态的运行: 实例方法:动态绑定,即引用的变量实际引用的类型是哪一个,则运行哪一个实例方法。在运行时由java虚拟机动态决定。 静态方法:静态绑定,即引用的变量所声明的类型是哪一个,则运行哪一个静态方法。在编译阶段就已经做出了决定。 成员变量(包括静态变量和实例变量):静态绑定,即引用变量所声明的类型是哪一个,则运行哪个成员变量。在编译阶段就已经做出了决定。 Base who = n...

wj196的专栏 304

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2210

激光三角测量法:斜射与直射式技术的原理与应用解析

本文深入解析激光三角测量法中斜射式与直射式技术的原理、应用及对比。斜射式适用于高精度小范围测量,尤其擅长处理反光表面;直射式则适合大范围位移检测,结构更简单。文章详细介绍了两种技术的光路分析、数学建模、应用场景及选型建议,并探讨了系统校准与误差分析方法,为工业检测领域提供实用参考。

weixin_29280219的博客 414

Java第七章总结:继承、多态类与接口

在开始学习使用class关键字定义类时,就应用到了继承原理,因为在Java中所有的类都直接或间接继承了java.lang.Object类是比较特殊的类,它是所有类的父类,是Java类层中的最高层类。getClass()方法是Object类定义的方法,它会返回对象执行时的Class实例,然后使用此实例调用getName()方法可以取得类的名称。定义为final的类不能被继承。将方法定义为final类型,可以防止子类修改父类的定义与现实方式,同时定义为final的方法的执行效果要高于非final方法。

nmy15570188135的博客 1198

金证股份软件测试笔试题面试题

boss上这家公司的HR找到了我,我看了一下这家公司的业务,是我以前做过的基金与证券。还是很感兴趣的,决定去面试看看情况。 (因为只是想去涨面试经验,没有想拿offer,一些回答有点不太对,为后面木有offer埋下伏笔。其实有点亏,毕竟走路过去,而且还花了3个小时) 地点在金证股份科技大楼8楼。 2月25号 主要分为笔试题和面试。 1、笔试题 进来的时候直接给我一份笔试题做,做了一个半小时吧。 分为3道选择题和1道SQL查询题、1道案例设计题 选择题都是考察SQL函数,可能日常生活中没有见过

全村的希望的博客 4451

【Java】多态中继承的转型❤

目录 一、前言 二、转型 向上转型 向下转型 一、前言 前面我们学习了多态的概述和使用,现在我们来学习前面剩下的转型问题。 二、转型 ???? 向上转型 ????向下转型 为什么会有转型呢,前面我们也说到了,多态中的使用前提是有父类引用指向子类对象 还有多态的缺点就是不能访问子类对象。(可以用到向下转型访问) 向上转型 ????其实多态中的父类引用指向子类对象就是向下转型,向下转型就是子到父。 就是将子类所申请的空间赋值给父类。形式: fu f=new zi

weixin_60719453的博客 904

MLX90640 热成像 STM32

MLX90640 热成像

zhaocundang's blog 5007

2026年数字IC设计禾赛科技笔试带答案解析

本文介绍了一份数字IC设计工程师笔试的试卷结构和部分题目解析。试卷包含15道单选题(30分)、10道填空题(20分)和5道简答/编程题(50分),总分100分,考试时长120分钟。单选题涉及同步时序电路、Verilog语法、跨时钟域设计、FPGA优化、存储器层次、功耗优化等知识点;填空题考查环形振荡器、工艺参数、时序约束、LUT结构等基础概念。试题重点考察应聘者对数字电路设计核心概念的理解和实际工程应用能力,特别是针对激光雷达芯片设计中的关键技术点进行考核。

Open 123

Java继承和多态之对象类型的转换

Java继承和多态之对象类型的转换

Need not to know 1157

基于 ESP32 的智能药盒提醒装置设计与实现

本装置基于 ESP32 实现了智能药盒的核心功能,硬件选型兼顾成本与实用性,软件设计模块化、易拓展。后续可通过 ESP32 的 WiFi 模块接入物联网平台(如阿里云、OneNet),实现远程设置提醒、服药状态反馈等功能,进一步提升智能化水平。该装置能有效解决老人忘服药问题,具有较高的实用价值与推广潜力。

weixin_42300449的博客 1045

学习-Java继承和多态之对象类型的转换

第1关:学习-Java继承和多态之对象类型的转换 任务描述 相关知识 向上转型 向下转型 编程要求 测试说明 任务描述 本关任务:使用对象类型的转换,根据编程提示,完成猫类和动物类的转换,以及彼此方法和属性的调用。 相关知识 在之前的学习任务中,我们学习了基本类型之间的转换,这里我们来为大家介绍对象间的类型转换。 Java 语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。如果把引用类型转换为子类类型,则称为向下转型;如果把引用类型转换为父类类型,则称为

aiains的博客 6292

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Java基础】Java的继承和多态

接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口。Java接口本身没有任何实现,只描述public行为,因此Java接口比Java抽象类更抽象化。Java接口的方法只能是抽象的和公开的,Java接口不能有构造方法,Java接口可以有public、Static和final属性。接口把方法的特征和方法的实现分隔开来,这种分隔体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。2.{2.{{提示。............

wang_qiu_hao的博客 1万+

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

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

Java 多态理解

多态:同样的引用调用同样的方法却做了不同的事情。 概述: 在设计一个方法时,通常希望该方法具备定的通用性。 例如要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传人犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象就是多态。 在Java中为了实现多态,允许使用一个父类类型的变...

2987345656@qq.com的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

练习-Java继承和多态之对象类型的转换

依次判断 f、a、p 是否为 Fruits 的子类对象;把梨类对象赋值给水果类,其中 name 值为 bigPear,颜色为 green;输出当前水果类引用的名称;依次判断当前水果类引用是否为水果类和梨类的子类;将当前水果类引用强转为梨类;输出当前梨类的颜色,以上就是今天要讲的内容。...

m0_65420451的博客 3469

java中的多态以及对象的类型转换

本文主要介绍了java中的多态的基本知识,以及个人对java中对象的类型转换的理解

qq_59750520的博客 1552

java多态性的强制转换_Java对象类型转换和多态性

对象类型转换分为向上转型和向下转型(强制对象转型)。向上转型是子对象向父对象转型的过程,例如猫类转换为动物类;向下转型是强制转型实现的,是父对象强制转换为子对象。这和基础数据类型的转换是类似的,byte在需要时会自动转换为int(向上转型),int可以强制转型为byte(向下转型)。对于对象转型来说,向上转型后子对象独有的成员将不可访问。意思是,在需要一只动物时,可以把猫当作一只动物传递,因为猫继...

weixin_42393829的博客 655

Java中的多态如何理解——详解

🎈🎈🎈本篇文章我们主要讲解的是Java中的多态,那么什么是多态呢?同类型的对象,执行同一个行为,会表现出不同的行为特征。接下来让我们一起对多态进行详细地讲解。

weixin_50635856的博客 8337

Java多态的实现机制是什么,写得非常好!

作者:crane_practicewww.cnblogs.com/crane-practice/p/3671074.htmlJava多态的实现机制是父类或接口定义的引用变...

Java技术栈,分享最主流的Java技术 7310

Java中对象的类型转换以及多态性

在这个示例中,我们首先定义了`Animal`类和它的子类`Dog`。然后在`main`方法中,我们创建了一个`Dog`对象`dog`,接着将`dog`向上转型为`Animal`类型并赋值给`animal`变量。当调用`animal.makeSound()`时,由于动态绑定机制,实际调用的是`Dog`类中重写后的`makeSound`方法,输出`Dog barks`。因为这个`Vehicle`对象实际上是`Car`的实例,所以向下转型成功,可以正常调用`Car`类中的`drive`方法和`honk`方法。

2301_77081232的博客 1734

Java中多态的实现机制

<br /> <br />多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性。在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度;今天我们再次深入Java核心,一起学习Java中多态性的实现。<br />“polymorphism(多态)”一词来自希腊语,意为“多种形式”。多数Java程序员把多态看作对象的一种能力,使其能调用正确的方法版本。尽管如此,这种面向实现的观点导致了多态的神奇功能,胜于仅仅把多态看成纯粹的概念。<b

yiihsia的学习阵地 5484
上一篇: Java(二)——简单的理解下面向对象内存分析
斐公公偏头痛
博客等级 码龄11年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值