2024年10月多态有几种表现形式(java中多态具体是什么)

 更新时间:2024-10-12

  ⑴多态有几种表现形式(java中多态具体是什么

  ⑵java中多态具体是什么

  ⑶多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。多态有两种表现形式:重载和覆盖、首先说重载(overload,是发生在同一类中,与什么父类子类、继承毫无关系。标识一个函数除了函数名外,还有函数的参数(个数和类型,也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!、再说覆盖(override),是发生在子类中,也就是说必须有继承的情况下才有覆盖发生。继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,那就把那个函数在子类中重新实现一遍。这样再调用这个方法的时候,就是执行子类中的过程了,父类中的函数就被覆盖了。

  ⑷java实现多态有几种方式分别是什么

  ⑸首先,多态存在的三个必要条件一、要有继承;二、要有重写;三、父类引用指向子类对象。多态引用类型有两种方式:a.编译时多态:方法的重载;b.运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态;

  ⑹什么是多态它的种类有哪些,请举例说明

  ⑺多态性:顾名思义就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态。它包括两种类型:静态多态性:包括变量的隐藏、方法的重载(指同一个类中,方法名相同,但是方法的参数类型、个数、次序不同,本质上是多个不同的方法);动态多态性:是指子类在继承父类(或实现接口)时重写了父类(或接口)的方法,程序中用父类(或接口)引用去指向子类的具体实例,从代码形式上看是父类(或接口)引用去调用父类(接口)的方法,但是在实际运行时,JVM能够根据父类(或接口)引用所指的具体子类,去调用对应子类的方法,从而表现为不同子类对象有多种不同的形态。不过,程序代码在编译时还不能确定调用的哪一个类的方法,只有在运行时才能确定,故又称为运行时的多态性。

  ⑻在JAVA中有两种多态是指:运行时多态和编译时多态。关于类的多态性简介如下:多态(polymorphism)意为一个名字可具有多种语义.在程序设计语言中,多态性是指”一种定义,多种实现”.例如,运算符+有多种含义,究竟执行哪种运算取决于参加运算的操作数类型:+//加法运算符“”+“”//字符串连接运算,操作数是字符串多态性是面向对象的核心特征之一,类的多态性提供类中成员设计的灵活性和方法执行的多样性.、类多态性表现()方法重载重载表现为同一个类中方法的多态性.一个类生命多个重载方法就是为一种功能提供多种实现.编译时,根据方法实际参数的数据类型个数和次序,决定究竟应该执行重载方法中的哪一个.()子类重定义从父类继承来的成员当子类从父类继承来的成员不适合子类时,子类不能删除它们,但可以重定义它们,使弗雷成员适应子类的新需求.子类重定义父类成员,同名成员在父类与子类之间表现出多态性,父类对象引用父类成员,子类对象引用子类成员,不会产生冲突和混乱.子类可重定义父类的同名成员变量,称子类隐藏父类成员变量.子类也可以重定义父类的同名成员方法,当子类方法的参数列表与父类方法参数列表完全相同时,称为子类方法覆盖(override父类方法。覆盖父类方法时,子类方法的访问权限不能小于父类方法的权限。由于Object类的equals()方法比较两个对象的引用是否相等而不是值是否相等,因此一个类要覆盖Object类的equals()方法,提供本类两个对象比较相等方法.覆盖表现为父类与子类之间方法的多态性.java寻找执行方法的原则是:从对象所属的类开始,寻找匹配的方法执行,如果当前类中没有匹配的方法,则逐层向上依次在父类或祖先类中寻找匹配方法,直到Object类.、super引用在子类的成员方法中,可以使用代词super引用父类成员.super引用的语法如下:super()//在子类的构造方法体中,调用父类的构造方法super.成员变量//当子类隐藏父类成员变量时,引用父类同名成员变量super.成员方法()//当子类覆盖父类成员方法时,调用父类同名成员方法*注意:super引用没有单独使用的语法、多态性有两种:编译时多态性对于多个同名方法,如果在编译时能够确定执行同名方法中的哪一个,则称为编译时多态性.运行时多态性如果在编译时不能确定,只能在运行时才能确定执行多个同名方法中的哪一个,则称为运行时多态性.方法覆盖表现出两种多态性,当对象获得本类实例时,为编译时多态性,否则为运行时多态性,例如:XXXXx=newXXXX(参数列表);//对象获得本类实例,对象与其引用的实例类型一致XXXxx=newXXX(参数列表);x.toString();//编译时多态性,执行XXX类的方法.xx.toString();//编译时多态性,执行XXXX类覆盖的方法.XXXX为XXX的父类.由于子类对象既是父类对象,父类对象与子类对象之间具有赋值相容性,父类对象能够被赋值为子类对象.例如,XXXXx=newXXX(参数列表);//父类对象获得子类实例,子类对象即是父类对象x.toString();//运行时多态x声明为父类对象却获得子类XXX的实例,那么x.toString()究竟执行父类方法还是执行子类覆盖的方法呢?这分为两种情况:取决于子类是否覆盖父类方法.如果子类覆盖父类方法,则执行子类方法;如果没有覆盖,则执行父类方法.在编译时,仅仅依据对象所属的类,系统无法确定到底应该执行那个类的方法,只有运行时才能确定,因此这是运行时多态.父类对象并不能执行所有的子类方法,只能执行那些父类中声明子类覆盖的子类方法.

  ⑼如何理解JAVA的多态性

  ⑽在面向对象编程中,多态是指一个接口有多种实现方式,即一个接口使用不同实例执行不同的操作。在java中多态有两种表现形式:方法的重载和方法的重写。方法的重载是指同一个类中可以可以存在多个同名的方法,但这些方法的参数必须不同(个数,顺序,类型,程序运行时根据其参数的数量与类型调用对应的方法实现不同的功能。(与返回值类型没有关系publicvoidplant(inti){方法体;}publicvoidplant(Strings){方法体;}方法的重写是指子类提供与父类相同的方法,包括方法的名称,参数列表,返回值类型。还有可以父类变量名=new子类(;

  ⑾多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法“表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。多态性也分静态多态性和动态多态性两种。静态多态性是指定义在一个类或一个函数中的同名函数,它们根据参数表(类型以及个数区别语义,并通过静态联编实现,例如,在一个类中定义的不同参数的构造函数。动态多态性是指定义在一个类层次的不同类中的重载函数,它们一般具有相同的函数,因此要根据指针指向的对象所在类来区别语义,它通过动态联编实现。“多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。在面向对象理论中,多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。多态性包含编译时的多态性、运行时的多态性两大类。动态多态是指发出同样的消息被不同类型的对象接收时,有可能导致完全不同的行为。即,在用户不作任何干预的环境下,类的成员函数的行为能根据调用它的对象类型自动作出适应性调整,而且调整是发生在程序运行时。多态是面向对象程序设计的重要特征之一。是扩展性在“继承”之后的又一重大表现。比方一下:你和你朋友都是烟鬼,某日,你没有带烟,而你朋友有n种烟,你说:来根烟,朋友给你一根;你通过烟的过滤嘴,品出为白沙烟你再要一根,品出这次是芙蓉王,再要一根,品出这次是熊猫...上面描述的就是多态!烟a=白沙烟b=芙蓉王烟c=熊猫但发现没有,仅仅通过“烟“基类,引用到不同的具体类对象,就能让你调用到不同的对象,这就是多态.而烟到你嘴里,你仅仅凭借“吸“的动作,就识别出来,到底是哪种烟对象这就是多态的悬机.多态须具备:.基类和各个子类.基类引用,指向实例化的子类对象.再举一个鸡的例子,鸡是所有其它鸡的基类,定义了一个方法shape(),此方法能指明鸡的形态.所有的子类,都有这个shape方法,表明自己的形态,如果用下面的方法定义我需要具体的鸡,forexample:鸡a=new火鸡();鸡a=new田鸡();鸡a=new山鸡();鸡a=new母鸡();当我使用的时候,我采用a这个引用,a.shape(),就会得到鸡的形态.如果我定义的是鸡a=new火鸡();那么a.shape得到的是火鸡的形态,而不需要用具体的火鸡a=new火鸡();再通过a.shape得到火鸡的形态

  ⑿多态的表现形式是什么

  ⒀多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。

  ⒁运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。

  ⒂多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

  ⒃C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关。

  ⒄OC中的多态:不同对象对同一消息的不同响应.子类可以重写父类的方法

  ⒅多态就是允许方法重名参数或返回值可以是父类型传入或返回。

  ⒆多态也指生物学中腔肠动物的特殊的生活方式。水螅态与水母态的世代交替现象。

  ⒇把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

  ⒈赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。

  ⒉举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。

  ⒊比如从某个基类派生出多个子类,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子类对象中的任何一个可以赋给其基类对象的引用。

  ⒋或者说将子对象地址赋给基类指针,这样其基类的对象就可以执行不同的操作了。实际上你是在通过其基类的引用来访问其子类对象的,你要做的就是一个赋值操作。

  ⒌使用继承性的结果就是当创建了一个类的家族,在认识这个类的家族时,就是把子类的对象当作基类的对象,这种认识又叫作upcasting(向上转型。

  ⒍这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,因为编译器会自动找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamicbinding)。

  ⒎相同的方法不同的实现,体现出多态,通俗理解为:“多种状态”,一龙生九子,九子不同多态分为三种::方法多态:类多态:接口多态重写:是覆盖重载:是方法名字相同,参数列表不同,参数类型不同接口是算多态的举例吧:Jbutton.addActionListener(newActionListener(){publicvoidactionPerformed(){................}});这就是属于接口多态,实现方法多态:有点类似于重载类多态:就继承关系

  ⒏.中多态的理解

  ⒐首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类覆写基类中的虚函数型方法来实现。多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。下面我们来分别说明一下多态中涉及到的四个概念:重载,覆写,虚方法和抽象方法。重载和覆写的区别:重载类中定义的方法的不同版本publicintCalculate(intx,inty)publicdoubleCalculate(doublex,doubley)特点(两必须一可以方法名必须相同参数列表必须不相同返回值类型可以不相同覆写子类中为满足自己的需要来重复定义某个方法的不同实现。通过使用override关键字来实现覆写。只有虚方法和抽象方法才能被覆写。要求(三相同相同的方法名称相同的参数列表相同的返回值类型最后再来介绍一下虚方法和抽象方法虚方法:声明使用virtual关键字。调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。虚方法可以有实现体。抽象方法:必须被派生类覆写的方法。可以看成是没有实现体的虚方法。如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。注意:昨天突然发现c#,和c++俩种语言在多态性的实现机制上面的细微差别。如果是C++,在基类的构造函数里面调用虚函数的话,会调用本类的不会调用派生类的,原因是基类构造的时候,虚表还没有被派生类继承和修改。但如果是C#,那就不同了,在基类的构造函数里面照样调用派生类的。不知道有谁知道c#它的这种底层机制是怎样的?-------是这样的,C++会先初始化基类,然后逐级初始化派生类型。C#则是一开始就把对象创建好了,然后逐个调用构造函数。本质区别在于C++的构造函数的任务是初始化,C#则不然,C#的类型的任何字段不必初始化,均有默认值,所以C#在调用构造函数之前就已经将对象初始化完毕了。通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。C#中的每种类型都是多态的。类型可用作它们自己的类型或用作Object实例,因为任何类型都自动将Object当作基类型。多态性不仅对派生类很重要,对基类也很重要。任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象。基类的设计者可以预测到其基类中可能会在派生类中发生更改的方面。例如,表示汽车的基类可能包含这样的行为:当考虑的汽车为小型货车或敞篷汽车时,这些行为将会改变。基类可以将这些类成员标记为虚拟的,从而允许表示敞篷汽车和小型货车的派生类重写该行为。

  ⒑简述java类中多态性的体现形式

  ⒒多态可分为:.编译多态:主要是体现在重载,系统在编译时就能确定调用重载函数的哪个版本。.运行多态:主要体现在OO设计的继承性上,子类的对象也是父类的对象,即上溯造型,所以子类对象可以作为父类对象使用,父类的对象变量可以指向子类对象。因此通过一个父类发出的方法调用可能执行的是方法在父类中的实现,也可能是某个子类中的实现,它是由运行时刻具体的对象类型决定的。

您可能感兴趣的文章:

相关文章