Java多态理解_什么是java多态

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

多态:同样的引用调用同样的方法却做了不同的事情。

Jetbrains全家桶1年46,售后保障稳定

概述:

在设计一个方法时,通常希望该方法具备定的通用性。 例如要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传人犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象就是多态。

在Java中为了实现多态,允许使用一个父类类型的变量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。

接下来通过一个程序来演示:

abstract class Animal {
	public abstract void shout(); // 定义抽象shout()方法
}

//定义Cat类继承Animal
class Cat extends Animal {
	// 实现shout()方法
	public void shout() {
		System.out.println("喵喵...");
		
	}
}

//定义Dog类继承Animal
class Dog extends Animal {
	// 实现shout()方法
	public void shout() {
		System.out.println("汪汪...");
		
	}
}

public class Duotai {
	public static void main(String[] args) {
		Animal cat = new Cat();
		Animal dog = new Dog();
		
		animalShout(dog);
		animalShout(cat);
//		运行结果:
//				汪汪...
//				喵喵...
	
	}
	
	// 定义一个静态的animalShout()方法,接收一个Animal类型的对象
	public static void animalShout(Animal animal) {
		animal.shout();// 调用实际参数的shout()方法
	}
}

Animal cat = new Cat();和 Animal dog = new Dog(); 两行代码实现了父类类型变量引用不同的子类对象。

调用animalShout()方法时,将父类引用的两个不同子类对象分别传入,结果打印出了“汪汪…”和“喵喵…”。

由此可见,多态不仅解决了方法同名的问题,而且还使程序变得更加灵括,从而有效地提高程序的可扩展性和可维护性。

对象的类型转换

在多态的学习中,涉及到将子类对象当作父类类型使用的情况,例如下面两行代码:

Animal cat = new Cat();        //将Cat对象当作Animal类型来使用

Animal dog = new Dog();     //将Dog对象当作Animal类型来使用

将子类对象当作父类使用时不需要任何显式地声明,需要注意的是,此时不能通过父类变量去调用子类中的某些方法。

这种不需要显式声明的类型转换叫自动类型转换。

对于animalShout()方法来说,传入的对象可以是Animal类型,还可以是Animal的子类型,它要怎么知道传入的到到底是哪一个类型呢?Java提供了一个instanceof关键字来判断一个对象的类型,其使用格式如下:

对象(或对象的引用变量)  instanceof  类(或接口)

对上面animalShout()方法代码进行修改:

	public static void animalShout(Animal animal) {
		if (animal instanceof Cat) {
			Cat cat = (Cat) animal;
			cat.shout();
		} else if (animal instanceof Dog) {
			Dog dog = (Dog) animal;
			dog.shout();
		} else {
			animal.shout();
		}
	}

利用instanceof进行类型判断的好处就是避免了强制类型转换过程中类型不匹配的错误。

多态思维导图:

Java多态理解_什么是java多态

JAVA基础思维导图 <<

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206754.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月5日 上午9:22
下一篇 2025年8月5日 上午10:01


相关推荐

  • 软件测试面试的自我介绍模板(无经验者面试软件测试)

    面试官,你好,我叫Jayce,16年本科毕业,从事软件测试将近3年的时间。在此期间做过一些项目也积累过一些经验,能够独立地完成软件测试流程的一个工作。我之前主要做过的是功能测试,web自动化测试、app专项测试、接口测试、也有用过Jmeter做过一些性能方面的测试。我对于缺陷管理工具比如禅道,版本控制器git与svn能够熟悉应用。数据库、linux、Fiddler、Jmeter这些应用也比较熟悉。…

    2022年4月15日
    57
  • Hibernate二级缓存问题[通俗易懂]

    Hibernate二级缓存问题[通俗易懂]相关概念和定义1、缓存的意义把一些不常修改,但是又经常用的数据存放到内存中,这样能减少与数据库的交互,提升程序的性能2、Hibernate中提供了两级缓存:第一级别的缓存是Session级别的缓存(比如说在调用get方法的时候,如果已经查询过一次了,第二次就不会查了,而是直接返回session缓存中已经存在的那个对象给你,不过这个只对当前Session有效,一旦又开一个新的Sess…

    2022年5月23日
    40
  • L1正则化和L2正则化的详细直观解释

    L1正则化和L2正则化的详细直观解释正则化 Regularizati 转自 此处机器学习中几乎都可以看到损失函数后面会添加一个额外项 常用的额外项一般有两种 一般英文称作 1 1 norm 和 2 2 norm 中文称作 L1 正则化和 L2 正则化 或者 L1 范数和 L2 范数 L1 正则化和 L2 正则化可以看做是损失函数的惩罚项 所谓 惩罚 是指对损失函数中的某些参数做一些限制 对于线性回归模型 使用 L1 正则化的模型建叫做 Lasso

    2026年3月18日
    2
  • okio源码解析「建议收藏」

    okio源码解析「建议收藏」1、为什么要学习okio源码?a)okio是安卓大神JakeWharton之作,大神之作必须是值得学习的。b)okio简单易用,高效。okio是对Javaio、nio的简洁封装,原生的Javaio采用装饰者模式,使用的时候非常繁琐,而相同的操作okio只需短短几行代码就可以搞定,当然除了简单易用之外,okio还是一个非常高效的io库,显著的节省CPU和Memory资源。c)okio

    2022年6月1日
    39
  • 谷歌放大招了!Nano Banana Pro 这四大提升太牛了(附 APi 接入教程 0.15/张) · w2solo

    谷歌放大招了!Nano Banana Pro 这四大提升太牛了(附 APi 接入教程 0.15/张) · w2solo

    2026年3月13日
    2
  • 恐怖黎明修改器|恐怖黎明十四项修改器小斧头版下载 v1.4最新版

    恐怖黎明修改器|恐怖黎明十四项修改器小斧头版下载 v1.4最新版点击下载来源:恐怖黎明十四项修改器小斧头版v1.4最新版恐怖黎明修改器是针对一款高燃的硬盒制游戏《恐怖黎明(GrimDawn)》量身打造的游戏辅助工具,通过它可让你随心所欲的修改游戏设定,把控好游戏难度,让你体验到最酸爽的游戏乐趣。它为你带来了HP不减、无技能CD、MP不减、最大攻速、无限虔诚点等十四项十分好玩的游戏辅助功能,再次踏入这是非之地,原先那些欺负的野蛮BOOS将轻易的拜倒在你的…

    2022年5月5日
    2.9K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号