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


相关推荐

  • 超分辨率的数据增强Python(超分辨率重建是什么)

    python在图像超分辨率重建中的应用洪华秀[1];【期刊名称】《计算机产品与流通》【年(卷),期】2019(000)002【摘要】图像超分辨率重建技术是低分辨率图像经过一系列算法处理后转换成高分辨率图像的过程,随着图像数据的应用领域不断延伸,这一技术也逐渐成了图像处理研究热点之一。近几年Python语言在人工智能领域逐渐占领榜首,它的优越性在于强大的第三方数据处理工具的支持。本文在图像超分辨率重…

    2022年4月12日
    198
  • java8中 Collectors.groupingBy用法

    java8中 Collectors.groupingBy用法Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组1、数据准备:publicProduct(Longid,Integernum,BigDecimalprice,Stringname,Stringcategory){this.id=id;this.num=num;this.price=price;this.name=name;this.category=category;}…

    2022年8月20日
    12
  • pycharm创建第一个程序_python创建新文件

    pycharm创建第一个程序_python创建新文件打开PyCharm,点击“CreateNewProject”。配置项目路径和python环境,配置完成后点击“Create”。项目创建成功!在项目名HelloWorld上点击右键,选择“New”-“PythonFile”,新建一个python文件,填写文件名。创建成功,写第一个python程序“HelloWorld”,写好后保存、运行。运行效果如下:至此第一个p…

    2022年8月29日
    3
  • python 去除字符串两端的引号[通俗易懂]

    python 去除字符串两端的引号[通俗易懂]使用遥感影像头文件时,需要获得里面的日期和时间信息,得到的字符串两端带有双引号,可以使用eval()函数去除。a='”srting”‘print(a)b=eval(a)print(b)结果:”srting”srting

    2022年6月9日
    129
  • 在C#中ParameterizedThreadStart和ThreadStart区别

    在C#中ParameterizedThreadStart和ThreadStart区别
    不需要传递参数,也不需要返回参数
      我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下:
    ThreadStartthreadStart=newThreadStart(Calculate);Threadthread=newThread(threadStart);thread.Start();publicvoidCalculate(){ doubleDiameter=0.5; Console.Write(“T

    2022年7月15日
    12
  • k8s pod同步时区

    k8s pod同步时区

    2021年5月15日
    167

发表回复

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

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