热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是多态(简述什么是多态)

本文主要介绍关于多态的知识点,对【什么是多态】和【简述什么是多态】有兴趣的朋友可以看下由【洞鉴】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【【Java基础】】相关技术问题。简述什么是多态

本文主要介绍关于多态的知识点,对【什么是多态】和【简述什么是多态】有兴趣的朋友可以看下由【洞鉴】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【【Java基础】】相关技术问题。

简述什么是多态

目录

什么是多态

为什么要用多态

多态存在的三个必要条件

多态怎么用

? ?A、引用多态

? ?B、方法多态

?

?

什么是多态

多态就是一个对象变量可以指向多种实际类型的现象,同一个事件发生在不同的对象上会产生不同的结果。???

多态也叫后期(动态)绑定(在运行时根据对象的类型进行绑定)

?

前期绑定:非面向对象编程,编译器会产生对一个具体函数的调用,运行时调用代码的绝对地址。c语言的调用就是前期绑定,而java除了static和final方法,其他都是后期(动态)绑定,换一个角度来说:多态不能作用于static和final

后期绑定:直到向对象发送消息时,才能确定被调用的代码

?

为什么要用多态

好处:使用多态可以消除类型之间的耦合关系

? ? ? ? ? ?通过分离做什么和怎么做,从另一角度将接口和实现分离开来。

弊端:不能用子类方法,可用转型的方法解决(下面会有说到)

?

多态存在的三个必要条件 继承 重写 父类引用指向子类对象:fu p=new zi();

?

多态怎么用 ? ? ??A、引用多态

? ? ? ? ? ? ? ? ? ? ? 父类的引用可以指向本类的对象;

? ? ? ? ? ? ? ? ? ? ? Fu fu=new Fu();

? ? ? ? ? ? ? ? ? ? ? 父类的引用也可以指向子类的对象;

? ? ? ? ? ? ? ? ? ? ? Fu fu =new Zi();

?

? ? ? ? ? ? ? ? ? ? 剖析:Fu fu=new Zi();

? ? ? ? ? ? ? ? ? ? 这句话分为两段,下面这样写会更加明确些

? ? ? ? ? ? ? ? ? ??1、Fu fu? ;? 声明一个变量fu为Fu这个类,

? ? ? ? ? ? ? ? ? ? 2、fu=new Zi(); 创建一个Zi类对象赋给了fu变量

? ? ? ? ? ? ? ? ? ? 这句话的作用是得到了一个被Zi类函数覆盖后的Fu类对象:fu

? ? ? ? ? ? ? ? ? ? 明确:fu是Fu类的,更具体的说是被zi类覆盖后的fu类的对象!从头到尾都是fu类。

? ? ? ? ? ? ? ? ? ? 进一步结论:? ?【多态时成员变量、静态方法和非静态方法的特点】

? ? ? ? ? ? ? ? ? ? 1、fu类原有的变量和静态方法(因为没被zi类覆盖的方法)没有任何变化,所以编译和运行都看fu类

? ? ? ? ? ? ? ? ? ? 2、而fu类中的非静态方法(被zi类覆盖)发生了变化,在编译阶段看fu类的(看fu类有没有,有的话编译通过),运行的时候运行的是zi类的代码。

? ? ? ? ? ? ? ? ? (其实对于静态方法,是不需要对象的。直接用类名调用即可。)

?

? ? ? B、方法多态

根据上述创建的两个对象:本类对象和子类对象,同样都是父类的引用,当我们指向不同的对象时,它们调用的方法也是多态的。

创建本类对象时,调用的方法为本类方法;

创建子类对象时,调用的方法为子类重写的方法或者继承的方法;

?

使用多态的时候要注意:如果我们在子类中编写一个独有的方法(没有继承父类的方法),此时就不能通过父类的引用创建的子类对象来调用该方法!!!(因为fu是Fu对象,他并没有子类的方法)

?

?

?

多态也会涉及到向上转型和向下转型(都是编译时期的转型),而向下转型又可以引出泛型

?

转型:

·向上转型:【自动】父类 父类对象 = 子类实例;

Fu f=new zi();

·向下转型:【强制】子类 子类对象 = (子类)父类实例;

Zi z=(zi)f;

?

多态一般可以分为两种,一个是重写override(运行时多态),一个是重载overload(编译时多态)。


?

?

?

?

?

?

?

本文《什么是多态》版权归洞鉴所有,引用什么是多态需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
author-avatar
乌鸦bz_371
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有