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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • densenet详解_dense参数

    densenet详解_dense参数DenseNet于论文《》中提出,是CVPR2017的oral。论文提出DenseNet并与ResNet和Inception做对较。为提升网络的效果,一般操作是增加网络的深度和宽度,但论文作者另辟蹊径,聚焦于feature的极致利用以获得更佳效果和更少参数。对于梯度消失问题,ResNet等网络使用跳层连接结构加以解决。作者延续该思路,提出DenseBlock,在保证网络层间最大程度的信息传输的同时,直接将所有层连接起来。……………………

    2022年9月29日
    0
  • 简单常用滤波算法C语言实现「建议收藏」

    简单常用滤波算法C语言实现「建议收藏」1.限幅滤波算法(程序判断滤波算法)方法解析:根据经验判断,确定两次采样允许的最大偏差值(设定为A),每次检测到新值时判断:如果本次值与上次值之差如果本次值与上次值只差>A,则本次值无效,放弃本次值,用上次值代替本次值。优点:能有效克服因偶然因素引起的脉冲干扰缺点:无法抑制那种周期性的干扰,平滑度差#defineA10charvalue;charfi

    2022年5月28日
    46
  • ubuntu 安装jdk

    ubuntu 安装jdkhttps://developer.aliyun.com/article/704959#:~:text=%E4%B8%80.%20Ubuntu%20%E5%AE%89%E8%A3%85JDK%E7%9

    2022年7月4日
    22
  • Eclipse–Team–SVN–URL修改

    Eclipse–Team–SVN–URL修改

    2021年9月9日
    55
  • react拖拽排序组件_uniapp拖拽生成器

    react拖拽排序组件_uniapp拖拽生成器移动端的拖拽排序在react中实现 了解一下

    2022年4月20日
    214
  • 免费下载付费文档_原创力文档赚钱容易吗

    免费下载付费文档_原创力文档赚钱容易吗最近我才发现,想要下载个文档,是真的不容易呀!可以让你随便复制粘贴和下载的文档,质量都不怎么样!优质的文档,需要下载券才能下载!说好的「让每个人平等地提升自我」呢?好在机智的我,最终发现了免费下载文档的奥秘,今天就分享出来给大家看,当做福利了,低调点用哦,不要让太多人知道!VVV文档在线导出工具http://wenku.baiduvvv.com/doc/之前很常用的一个在线文库下载网站突然要收费了…

    2025年7月13日
    1

发表回复

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

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