Java的多态

Java的多态跟C++差不多,主要是通过方法的重载和覆盖来实现类的多态性的。

一、方法的重载(overloading)

方法的重载是指在一个类中,出现多个方法名相同,但参数个数货参数类型不同的方法。

例子中同样是一个getArea函数,由于参数个数的不同,返回的分别是圆形、矩形以及梯形的面积。

public class Calculate {
	final float PI = 3.14159f;
	
	public float getArea(float r)
	{
		float area = PI * r * r;
		return area;
	}
	
	public float getArea(float l, float w)
	{
		float area = l * w;
		return area;
	}
	
	public float getArea(float up, float down, float high)
	{
		float area = (up + down) * high / 2;
		return area;
	}
	
	public static void main(String[] args) 
	{
		Calculate c = new Calculate();
		float r = 10;
		float l = 5;
		float w = 4;
		
		System.out.println("半径为10的圆的面积是" + c.getArea(r));
		System.out.println("长为5宽为4的矩形的面积是" + c.getArea(l,w));
		System.out.println("上低为5下底为4高为10的梯形的面积是" + c.getArea(l,w,r));
		
	}
}

运行结果是

半径为10的圆的面积是314.159
长为5宽为4的矩形的面积是20.0
上低为5下底为4高为10的梯形的面积是45.0


二、方法的覆盖(Overriding)

方法的覆盖发生在继承中,当子类继承父类后,如果子类的方法名誉父类的方法名相同,那么子类就不能继承父类的方法,或者说父类重的方法被子类覆盖。

例子中有覆盖了父类Animal的move方法的Bird和Horse,还有没有覆盖父类的dog,还有父类Animal4个类的move函数的结果。

public class Zoo {
	public static void main(String[] args)
	{
		Bird bird = new Bird();
		System.out.println("执行bird的move函数的结果是");
		bird.move();
		Horse horse = new Horse();
		System.out.println("执行horse的move函数的结果是");
		horse.move();
		Dog dog = new Dog();
		System.out.println("执行dog的move函数的结果是");
		dog.move();
		Animal animal = new Animal();
		System.out.println("执行animal的move函数的结果是");
		animal.move();
	}
}

运行结果是

执行bird的move函数的结果是
鸟会飞翔
执行horse的move函数的结果是
马会跑
执行dog的move函数的结果是
动物会运动
执行animal的move函数的结果是
动物会运动


总结:

1、在方法重载中,方法返回值的类型不能作为区分方法重载的标志。

2、在方法覆盖中,需要注意以下几点

(1)子类不能覆盖父类中声明为final或者static的方法。

(2)子类必须覆盖父类中声明为abstract的方法,或者子类也将该方法声明为abstract。

(3)子类覆盖父类中的同名方法时,子类中的声明也必须和父类中被覆盖的方法的声明一样,否则就无法覆盖,而会变成重载,即父类子类的两个函数都存在,根据参数的不同来区分。

【Koopman】遍历论、动态模态分解和库普曼算子谱特性的计算研究(Matlab代码实现)内容概要:本文围绕【Koopman】遍历论、动态模态分解和库普曼算子谱特性的计算研究展开,重点介绍基于Matlab的代码实现方法。文章系统阐述了遍历理论的基本概念、动态模态分解(DMD)的数学原理及其与库普曼算子谱特性之间的内在联系,展示了如何通过数值计算手段分析非线性动力系统的演化行为。文中提供了完整的Matlab代码示例,涵盖数据驱动的模态分解、谱分析及可视化过程,帮助读者理解并复现相关算法。同时,文档还列举了多个相关的科研方向和技术应用场景,体现出该方法在复杂系统建模与分析中的广泛适用性。; 适合人群:具备一定动力系统、线性代数与数值分析基础,熟悉Matlab编程,从事控制理论、流体力学、信号处理或数据驱动建模等领域研究的研究生、博士生及科研人员。; 使用场景及目标:①深入理解库普曼算子理论及其在非线性系统分析中的应用;②掌握动态模态分解(DMD)算法的实现与优化;③应用于流体动力学、气候建模、生物系统、电力系统等领域的时空模态提取与预测;④支撑高水平论文复现与科研项目开发。; 阅读建议:建议读者结合Matlab代码逐段调试运行,对照理论推导加深理解;推荐参考文中提及的相关研究方向拓展应用场景;鼓励在实际数据上验证算法性能,并尝试改进与扩展算法功能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值