从头开始学java--多态

零基础玩转IndexTTS2:5分钟搭建个人语音克隆工具(支持B站同款情感语音) 本文详细介绍了如何零基础使用IndexTTS2快速搭建个人语音克隆工具,支持B站同款情感语音。IndexTTS2作为自回归零样本TTS系统,突破传统技术限制,实现精准时长控制和丰富情感表达。通过HuggingFace在线演示,用户可轻松克隆音色并调节情感参数,适用于自媒体配音、有声书朗读等场景。 阅读详情


一.多态的定义


何谓多态?多态可以理解为事物存在的多种体现形态。同一种事物,在不同条件下,表现为不同的结果。

举个例子,有一只猫,还有一只狗,统称为动物。当我们面前有一只猫的时候,我们说动物,那么指的就是这只猫,如果我们面前是一只狗,那么我们说动物就指的是这只狗。

多态的定义方式:  父类  父类的引用  = new 子类。父类的引用也可以接受子类对象。

我们根据父类的引用来调用子类的方法,可以大大提高程序的扩展性。

例如:

abstract class Animal
{
	public abstract void eat(); 
}

class Cat extends Animal
{
	public void eat()
	{
		System.out.println("eat 猫食");
	}
}

class Dog extends Animal
{
	public void eat()
	{
		System.out.println("eat 狗食");
	}
}

public class PolymorphismTest {
	
	public static void main(String[] args)
	{
		Animal animal1 = new Cat();
		Animal animal2 = new Dog();
		feedAnimal(animal1);
		feedAnimal(animal2);
	}
	
	//静态方法,喂动物,接收Animal类型,执行子类方法
	public static void feedAnimal(Animal animal)
	{
		animal.eat();
	}

}

如果没有多态,那么喂动物的静态方法则需要根据各种动物,写各种eat方法。如果有新增的动物,那么改动会很大。而有了多态,我们只需要根据父类Animal的引用,调用各种动物的eat方法。

要点:

1.多态的体现:父类引用指向了子类的对象。可以是定义时声明,也可以接受。

2.多态的前提:(a)类之间有继承或者实现的关系 (b)存在方法的覆盖

3.提高了扩展性,但是注意用父类的引用使用父类存在的方法,子类实现。


二.多态的转型

父类类型的引用引用子类的对象,但是子类对象会有自己的一些方法和字段,如果要调用子类自己的方法,父类没有这些方法,那要怎么做呢?
答案就是父类引用强制转换为子类引用,但是对象还是子类的对象,一直没有改变。

//父类
class Parent
{
	//eat方法
	public void eat()
	{
		System.out.println("Parent eat");
	}
}

//子类,继承父类
class Son extends Parent
{
	//子类eat方法,覆写父类eat方法
	public void eat()
	{
		System.out.println("Son eat");
	}
	
	public void play()
	{
		System.out.println("Son play");
	}
}

//main
public class PolymorphismTest2 {
	public static void main(String[] args)
	{
		Parent parent = new Son();
		//调用eat方法
		parent.eat();
		//调用play方法,但是父类没有play方法,所以将引用向下转型为Son类型,有play方法,才可以调用
		((Son)parent).play();
	}
}

要点:
1.定义一个子类对象并用父类引用时(或者直接将子类对象赋值给父类引用时),称为向上转型,可以直接转型。
2.从父类引用转向为子类引用,称为向下转型,不能直接转型,需要用强制转换。
3.注意自始至终对象是没有转换的,转换的都是引用!!!


三.多态的特性

public class ParentChildTest {
	public static void main(String[] args) {
		Parent parent=new Parent();//100
		parent.printValue();
		Child child=new Child();//200
		child.printValue();
		
		parent=child;
		parent.printValue();//200
		
		parent.myValue++;
		parent.printValue();//200
		
		((Child)parent).myValue++;
		parent.printValue();//201
		
	}
}

class Parent{
	public int myValue=100;
	public void printValue() {
		System.out.println("Parent.printValue(),myValue="+myValue);
	}
}
class Child extends Parent{
	public int myValue=200;
	public void printValue() {
		System.out.println("Child.printValue(),myValue="+myValue);
	}
}


要点:
1.多态中父类和子类有同名变量时,看的是引用类型的变量,根据引用类型的变量判断使用子类还是父类中的变量。
2.多态中父类和子类中有同名方法时,看的是对象类型。对象是子类的,调用的是子类的方法;对象是父类的,调用的是父类的方法。
3.多态中父类和子类有相同的静态时,看到是引用类型。


RML2018.01a数据集的读取与使用 基于深度学习的自动调制识别 阅读详情

相关推荐

STM32F405实战:手把手教你实现永磁同步电机无感FOC控制(附完整工程文件)

本文详细介绍了基于STM32F405微控制器实现永磁同步电机无感FOC控制的完整实战方案。文章从硬件搭建、CubeMX配置入手,逐步讲解了FOC核心算法、SVPWM调制,并重点阐述了如何结合HFI高频方波注入与滑模观测器(SMO)实现全速域无感控制。内容涵盖算法原理、代码实现、参数整定及调试技巧,并附有完整工程文件,为开发者提供从理论到实践的全面指导。

sun99的博客 267

【从头开始学JAVA】面向对象总结

【从头开始学JAVA】面向对象总结1.面向对象复习4.关于内存模型5.JAVA编码顺序:6封装7.执行顺序:构造代码块-->构造方法-->局部代码块8.this9.继承10.supe 1.面向对象复习 面向过程–思想–干活的主体是自己 面向对象–思想–干活不是自己,我们是指挥者,不论干啥,都得先创建对象 2.类–把一类事物抽象成一个类型–模板/图纸–class 3.对象–根据图纸创造出来的一个个实际的实例–new 4.关于内存模型 一共分5块,目前我们需要了解的是栈(先进后出)和堆(对象都存入堆

Memory_314的博客 193

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

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

weixin_42558093的博客 405

Java从头开始--封装、继承和多态

面向对象的三大特征 1.面向对象语言的三大特征 封装 继承 多态 封装 封装的概念 将类中的某些信息(成员变量,方法)隐藏起来,不让外部的程序直接访问,可通过专门的方法来实现对隐藏信息的操作和访问。 封装的好处 封装的具体表现 属性使用private权限 方法使用public权限 例如: public class Demo{ private String name; public String getName (){ return name; } pu

crraxx的博客 543

Python Selenium调用IE11报错全解析:从环境配置到稳定运行

在Web自动化测试领域,Selenium作为主流的跨浏览器测试框架,其核心原理是通过WebDriver协议与不同浏览器的驱动程序进行通信,实现对浏览器行为的模拟与控制。这一技术为软件测试的自动化、回归测试的效率提升提供了重要价值,广泛应用于金融、政务等对遗留系统兼容性要求高的行业场景。然而,当技术栈涉及过时的浏览器如IE11时,环境配置的复杂性显著增加,特别是Python与Selenium的组合常遭遇驱动兼容性、安全设置等挑战。本文聚焦于解决Python Selenium驱动IE11时的典型报错问题,深入剖

weixin_28834765的博客 323

【CVPR 2025】低光增强HVI论文精读与源码复现---part1 论文网络精读

【CVPR 2025】本文参考论文HVI: A New Color Space for Low-light Image Enhancement part1 在文章中对论文核心网络与原理展开详细解释 part2 对论文公开代码的arch网络与其他核心部分展开详细解释

BOB_BOB_BOB_的博客 3269

从头开始学java-继承

java--继承

puppet_master的专栏 1002

Cadence IC617仿真实践:有源电流镜的共模抑制比优化策略

本文基于Cadence IC617平台,详细介绍了有源电流镜共模抑制比(CMRR)的仿真与优化全流程。从电路搭建、DC工作点分析到AC仿真获取差模/共模增益,逐步解析CMRR计算方法。核心优化策略包括提升电流镜输出阻抗、优化差分对匹配性及调整晶体管尺寸,并探讨了与电源抑制比(PSRR)的权衡,为模拟集成电路设计提供实用指南。

weixin_29313817的博客 184

从头开始学java--抽象类&接口

java--抽象类&接口

puppet_master的专栏 858

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 400

学Simulink——基于Simulink的单相PWM整流器PI电压外环+电流内环控制建模示例

本文详细介绍了基于Simulink的单相PWM整流器双闭环控制仿真方法。通过电压外环PI控制器调节有功功率生成电流指令,电流内环PI控制器实现正弦电流跟踪,最终达到输出电压稳定(400V±2V)、输入电流THD<3%、功率因数>0.99的目标。文章包含系统架构、数学模型、Simulink搭建步骤(主电路、PI控制器、SPWM调制等)及三种典型工况的仿真验证,并给出电感设计、数字实现等工程实践要点。该方案克服了传统整流器高谐波、低功率因数的问题,为绿色电源开发提供了可验证的仿真模型。

xiaoheshang_123的博客 75

从头开始学Java

1、组合的概念,写了一个class,在另一个class中引用;“has-a关系”“汽车拥有引擎” 2、继承的概念,可以写新方法或者覆盖之前的方法 3、多态 ——前期绑定,非面向对象编程,编译器产生一个具体名字的调用 ——后期绑定,面向对象编程,编译器确保被调用方法的存在,但是不知道被执行的具体代码(java代替绝对地址调用的方法:代码使用在对象中存储的信息来计算方法体的地址) java中动态绑定是默认行为,不需要添加额外的关键字实现多态 多态的三个必要条件:继承、重写、父类引用指向子类 4、J

qq_35417004的博客 167

Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程

本文主要介绍了Linux 下 OpenClaw 安装全记录:从零到一的保姆级图文教程,希望能对学习使用OpenClaw 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装Node.js 2.2 步骤二:安装git 2.3 步骤三:安装并配置OpenClaw 2.4 步骤四:配置OpenClaw 2.5 步骤五:配置模型 2.6 步骤六:对话 3. 后续使用步骤 4. 报错解决方案 5. OpenClaw的卸载

weixin_43178406的博客 10万+

java继承派生和多态详解

继承 继承,顾名思义,就是把已经有的拿过来归为己用,java中的继承也不例外。 举个例子,假如现在有这样一个需求,让我们写一个关于狗的Dog类,Dog类中有狗的名字、年龄,还有狗的两种行为,也就是这个类的两种方法,分别是run(跑)方法和bark(犬吠)方法,那么我们就可以这样写: public class Dog { String name; int age; public void ...

英俊帅比林的博客 2729

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

从头开始学Java——JVM虚拟机八问

文章目录什么是Java虚拟机,为什么Java被称为“平台无关的编程语言”?什么是JIT?HotSpot怎么工作的?HotSpot虚拟机要使用解释器与编译器并存的架构? 前置文章:为分布式做准备吧——JVM线程资源同步及交互机制 前置文章2:为分布式做准备吧——深入理解JVM 什么是Java虚拟机,为什么Java被称为“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。...

No_Game_No_Life_的博客 477

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Java SE基础】封装、继承、多态

本文讲述了Java面向对象三大特性中的继承和多态

2302_76707004的博客 688

Statistics and Machine Learning Toolbox

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

关于继承和多态

将子类对象赋值给父类引用变量的过程称为向上转型。如果我们自顶向下的看多态,父类在最顶端,子类在最低端,从子类转化为父类的过程,就是向上转型;

m0_69932385的博客 970

【从头开始】Java基础Day05

面向对象、三大特性、异常处理

李的博客 1008

Java多态讲解(1)

尽管animal的编译时类型是Animal类,但实际对象是Dog类型的实例,因此调用c1.show()时,实际调用的是Dog类中定义的方法,输出结果是"子类方法"。即使实际对象是Dog01类型,c1.a仍然会访问Animal01类中定义的a成员变量,而不是Dog01类中定义的a成员变量,因为c1的编译时类型是Animal01。而成员方法和成员变量则属于具体的实例对象,每个对象拥有自己独立的一份。多态的本质就是通过父类的引用变量来引用子类的对象,并根据具体的对象类型执行相应的方法,从而实现动态绑定的机制。

m0_71469414的博客 498

Java继承与多态

Java 继承与多态 ​ 面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言只能被称作“使用对象的语言”。继承是非常简单而强大的设计思想,它提供了我们代码重用和程序组织的有力工具。 ​ 类是规则,用来制造对象的规则。我们不断地定义类,用定义的类制造一些对象。类定义了对象的属性和行为,就像图纸决定了房子要盖成什么样子。 ​ 一张图纸可以盖很多房子,...

Vecchioo的博客 218

从头开始学java--异常处理

java--异常处理

puppet_master的专栏 902

【Java从头开始】第三章 面向对象

目录第三章 面向对象3.1 面向对象概述3.1.1 面向过程和面向对象有什么区别?3.1.2 面向对象使用的术语(三大思想)3.1.3 面向对象包括3大特征3.1.4 类和对象的概念3.1.5 类 = 属性 + 方法3.1.6 类的定义3.2 创建对象3.2.1 创建对象内存分析3.2.1.1 栈3.2.1.2 堆3.3 构造方法3.1.1 构造方法设计3.4 方法重载3.5 构造方法的重载3.6 匿名对象3.7 封装3.8 this关键字3.9 static 关键字3.10 包介绍3.11 代码块3.11

三驴蛋蛋的博客 1109

JAVA-继承和多态

面向对象程序设计语言有三大特性:封装、继承和多态性。继承是面向对象语言的重要特征之一,没有继承的语言只能被称作“使用对象的语言”。继承是非常简单而强大的设计思想,它提供了我们代码重用和程序组织的有力工具。 类是规则,用来制造对象的规则。我们不断地定义类,用定义的类制造一些对象。类定义了对象的属性和行为,就像图纸决定了房子要盖成什么样子。 一张图纸可以盖很多房子,它们都是相同的房子,但是坐落在不同的地方,会有不同的人住在里面。假如现在我们想盖一座新房子,和以前盖的房子很相似,但是稍微有点不同。任何一个建筑师都

LZM647的博客 252

java进阶学习第一天_java 从头开始学 第一天(基础概念)

面向对象编程oppjava是一个支持并发基于类和面向对象的计算机编程语言。优点1 代码开发模块化,更易于维护和修改。2 代码复用。3 增强代码的可靠性和灵活性。4 增强代码的可靠性。面向对象编程有很多重要的特性:封装,继承,多态和抽象。1.封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变他内部的数据。在java当中,有3种修饰符:public,private和pr...

weixin_39576066的博客 81

JAVA 第四周 继承与多态

JAVA 第四周 继承与多态

weixin_74251867的博客 110

java 从头开始学 第一天(基础概念)

面向对象编程opp java是一个支持并发基于类和面向对象的计算机编程语言。 优点 1 代码开发模块化,更易于维护和修改。 2 代码复用。 3 增强代码的可靠性和灵活性。 4 增强代码的可靠性。 面向对象编程有很多重要的特性:封装,继承,多态和抽象。 1.封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变他内部的数据。在java当中,有3种修饰...

weixin_30545285的博客 87
上一篇: 从头开始学java--抽象类&接口
下一篇: 从头开始学java--内部类
puppet_master
puppet_master 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄12年 2695粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值