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

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

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

概述:

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

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


相关推荐

  • org.aspectj aspectjweaver 报错

    org.aspectj aspectjweaver 报错http://mvnrepository.com/artifact/org.aspectj/aspectjweaver在pom中把版本改高一些就Ok了      org.aspectj     aspectjweaver     1.7.4   之前红色部分是1.6.11

    2022年7月14日
  • Mybatis实现Oracle 分页「建议收藏」

    Mybatis实现Oracle 分页「建议收藏」Mybatis+Oracle分页1,使用mybatis的插件PageHelper(1)Mapper.xml<?xmlversion=”1.0″encoding=”UTF-8″?><!DOCTYPEmapperPUBLIC”-//mybatis.org//DTDMapper3.0//EN””http://mybatis.org/dtd/mybati…

    2022年5月28日
  • 字符串常量池、class常量池和运行时常量池「建议收藏」

    字符串常量池、class常量池和运行时常量池「建议收藏」 原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/                 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有问题,笔者尝试着…

    2022年9月10日
  • 10种流行的Java框架[通俗易懂]

    10种流行的Java框架[通俗易懂]任何框架都是有助于更快更好地开发软件解决方案的工具之一。框架的基本原理不必重新发明轮子。框架使开发人员的工作变得更轻松,并帮助他们专注于业务逻辑,而不必担心通用的代码段。而且由于Java并不是最简单的编程语言之一,因此框架在这里绝对是有用的工具。在本文中,我收集了一些最流行,最有价值的框架,这些框架可以帮助您进行Java应用程序开发。1.Spring这是其他Java框架中的绝对领导者。掌握Spring是Java开发人员职位最普遍的要求之一。造成这种情况的原因很多,但主要的.

    2022年7月7日
  • could not initialize proxy – no Session

    could not initialize proxy – no Session

    2021年8月13日
  • java nio_(一) Java NIO 概述[通俗易懂]

    java nio_(一) Java NIO 概述[通俗易懂]一、阻塞IO与非阻塞IO阻塞IO:通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(ThreadperRequest),服务器会为每个客户端请求建立一个线程,由该线程单独负责处理一个客户请求。这种模式带来的一个问题就是线程数量的剧增,大量的线程会增大服务器的开销。大多数的实现为了…

    2022年7月8日

发表回复

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

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