×

多态性的概念

多态性的概念(解释多态性)

admin admin 发表于2023-05-28 12:17:13 浏览46 评论0

抢沙发发表评论

本文目录

解释多态性


多态性分生物上的概念和计算机技术上的概念,以下是两个领域的对于多态性的有关解释,希望对你有用
1 多态性是指一个基因座位上存在多个等位基因。就某一个体基因座位而言,最多只能有两个等位基因,分别来自父母方的同源染色体上。因而, MHC 多态性指的是一个群体概念,即群体中不同个体在等位基因拥有状态上存在的差别。 HLA 是人体中多态性最丰富的基因系统,其等位基因的数目有 1031 个之多,且均为共显性基因,若按随机组合,人群中的基因型可达 10 12 种。因此,人群中除同卵双生外,无关个体间 HLA 型别完全相同的可能性极小。 HLA 多态性主要表现在经典的 I 、 II 类基因,这与 I 、 II 类基因产物参与提呈抗原肽有关。 MHC 多态性使得种群能对各种病原体产生合适的免疫应答,应付多变的环境条件,以维持群体的稳定性。
在遗传生态学上一般用遗传多样性,比如同一物种遗传后代的多样性、种群遗传多样性、品种遗传多样性。
而在遗传学、分子遗传学等领域用多态性,比如基因多态性、电泳条带的多态性等.
说遗传多态性的比较少见,一般说DNA多态性等,比如利用 DNA 多态性进行多种突变检测,用于物种鉴定,种群结构分析和遗传多样性研究。不过也有少数用遗传多态性表示的,但其前面一般加上个定语,如DNA遗传多态性,同工酶遗传多态性。
2 多态性的实现与静态联编、动态联编有关。静态联编支持的多态性称为编译时的多态性,也称静态多态性,它是通过函数重载和运算符重载实现的。动态联编支持的多态性称为运行时的多态性,也称动态多态性,它是通过继承和虚函数实现的。
C++允许在参数类型不同的前提下重载函数。重载的函数与具有多态性的函数(即虚函数)不同处在于:调用正确的被重载函数实体是在编译期间就被决定了的;而对于具有多态性的函数来说,是通过运行期间的动态绑定来调用我们想调用的那个函数实体。多态性是通过重定义(或重写)这种方式达成的。请不要被重载(overloading)和重写(overriding)所迷惑。重载是发生在两个或者是更多的函数具有相同的名字的情况下。区分它们的办法是通过检测它们的参数个数或者类型来实现的。重载与CLOS中的多重分发(multiple dispatching)不同,对于参数的多重分发是在运行期间多态完成的。

请问什么事多态如何理解多态


多态
(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function) 实现的。
多态性
是允许将父对象设置成为和一个或多个它的子对象相等的技术,比如Parent:=Child; 多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作.
c++中多态更容易理解的概念为允许父类指针或名称来引用子类对象,或对象方法,而实际调用的方法为对象的类类型方法。
多态的作用
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。比如从某个基类继承出多个对象,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子对象中的任何一个可以赋给其基类的对象,这样其基类的对象就可以执行不同的操作了。实际上你是在通过其基类来访问其子对象的,你要做的就是一个赋值操作。使用继承性的结果就是可以创建一个类的家族,在认识这个类的家族时,就是把导出类的对象当作基类的的对象,这种认识又叫作upcasting。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,因为编译器会自动就找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamic binding)。简单的说,建立一个父类的变量,它的内容可以是这个父类的,也可以是它的子类的,当子类拥有和父类同样的函数,当使用这个变量调用这个函数的时候,定义这个变量的类(也就是父类)里的同名函数将被调用,当在父类里的这个函数前加virtual关键字,那么子类的同名函数将被调用。
class A { public: A() {} virtual void foo() { cout 《《 “This is A.“ 《《 endl; } }; class B : public A { public: B() {} void foo() { cout 《《 “This is B.“ 《《 endl; } }; int main(int argc, char* argv) { A *a = new B(); a-》foo(); return 0; } 这将显示: This is B. 如果把virtual去掉,将显示: This is A. 前面的多态实现使用抽象类,并定义了虚方法.

什么是多态性


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

什么是多态性 多态性在遗传学研究中有何意义


遗传多态性(genetic polymorphism) 同一群体中两种或两种以上变异类型并存的现象,其中最少的一种类型也并非由于反复突变才得以维持,并且变异类型不包括连续性变异如人的高度等。
平衡型多态
人类的ABO血型由一个座位上3个复等位基因所控制(见血型遗传)。在各个人群中这3个等位基因的频率常不相同,可是它们之间的比例却长期保持不变。例如等位基因B在欧亚大陆交界处的人群中占16%以上,在英国约占 4~6 %,在这中间呈现一个梯度,这些百分数长期保持不变。基因A的情况也相似,世界各地的多数人群中基因A约占0~10%,少数人群高于35%。
在拟暗果蝇的同一唾腺染色体上可以发现各种不同的倒位,在同一群体中这些倒位染色体以不同的频率并存。虽然各种倒位的相对频率随着季节的不同而有规律地变动,可是在同一季节中各种倒位的频率保持稳定,而且各个不同的群体都有特定的频率。
另外一种普遍存在的多态现象反映在功能相同的酶的电泳图谱上。在分析过的几乎任何一种生物中都发现有这类同工酶的存在,而且各个群体也常有它的多态特征。在6种生物中测得群体中平均每一个体中有 6.7%到12.3%的座位上的基因呈杂合状态,不同的等位基因编码不同的同工酶蛋白,人的杂合座位占6.7%。
过渡型多态
椒花蛾有浅色的和深色的两种类型,这是一对基因决定的性状,深色是显性。 19世纪中叶在英国曼彻斯特所采集到的椒花蛾中不到1%是深色的,在1898年则增加到 99%。在过去的 120年中北欧和北美洲的许多浅色的蛾都逐渐为深色类型所取代。在深色类型完全取代浅色类型以前,这两种类型构成不稳定的或过渡性的多态群体。

什么是多态为什么用多态有什么好处多态在什么地方用


概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象。 原因:我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了代码重用。而多态除了代码的复用性外,还可以解决项目中紧偶合的问题,提高程序的可扩展性.。耦合度讲的是模块模块之间,代码代码之间的关联度,通过对系统的分析把他分解成一个一个子模块,子模块提供稳定的接口,达到降低系统耦合度的的目的,模块模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。 有两个好处: 1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。//继承 2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。//多态的真正作用, 可以用在方法的参数中和方法的返回类型中。 在方法中的参数,请看下面的例子: public abstract class Driver{public void run();//让子类来运行} class SBenz : Driver{public void run(){Console.WriteLine(“Benz在以200迈的速度在run“);}} class JD : Driver{public void run(){Console.WriteLine(“JD is running...“);}} class Person{private Driver driver; public Person(){}public Person(Driver driver){this.driver = driver;}public void drive(){driver.run();}public void setDriver(Driver driver) this.driver = driver;}} static void Main(string args){Person p = new Person(); JD jd = new JD();//刚开始没钱就买辆JD吧 p.setDriver(jd); p.drive();SBenz benz = new SBenz();//有钱换车了 p.setDriver(benz); p.drive();} 在方法的返回类型中,请看下面的例子: 上面的例子中,不管是JD还是Benz都是我们自己直接new出来的.我们可以设计一个工厂类,专门生成汽车/*** 我们将多态使用在方法的返回类型中 * Driver可以是抽象类,也可以是接口,JD和Benz分别继承该类或实现该借口*/public class CarFactory{public Driver factory(String carName){if (carName.Equals(“JD“)){return new JD();} else if (carName.Equals(“Benz“)){return new SBenz();}else{Console.WriteLine(“对比起,不伺候“); return null;}}}这实际上就是设计模式中的简单工厂模式! 类型的参数.,传入参数的时候,可以传入任何一个类的对象,只要是对应的类的对象名称就可以了这就是多态的应用!

什么是多态多态的概念及作用是什么


  1. 概念:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。

    引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数实现的。

  2. 作用:

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

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

    简单的说,建立一个父类对象的引用,它所指对象可以是这个父类的对象,也可以是它的子类的对象。java中当子类拥有和父类同样的函数,当通过这个父类对象的引用调用这个函数的时候,调用到的是子类中的函数。

参考资料

百度百科:https://baike.baidu.com/item/%E5%A4%9A%E6%80%81/2282489?fr=aladdin


22. 什么是多态


如果是面向对象程序设计中的话,我估计是下面这个答案,
面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作
用就体现出来了,这些对象不必是相同类型的对象。当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。如果这些对象都有同名方法,就可以调用每个对象的同名方法。
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类重载基类中的虚函数型方法来实现。
在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作,由对象来完成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。
“多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。在C#中,多态性的定义是:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性:
● 编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
● 运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。
编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。