2012-03-25 144 views
-1

昨天,我在一次采访中被问到有关多态性的问题......什么是多态,它的两种形式或多种形式?

以下哪些陈述对于多态性是正确的?

  1. 多态性是一种方法,其中一个类可以以多种形式存在。
  2. 多态性是一种方法,其中一个类只能以两种形式存在。
  3. 多态性是其中不同势一个对象显示不同势行为的实例的方法
  4. 多态性是其中不同势一个对象显示相同的行为的情况下
+3

最不正确的说法是#1 :) – dasblinkenlight 2012-03-25 13:28:41

+3

以上都不是 – rsp 2012-03-25 13:29:53

+1

多态性是一种方法吗?对象的实例?不同的班*形式*?我勒个去? – Irfy 2012-03-25 13:29:54

回答

0

他们都是正确的,这里是如何: 1' : 的问题(我希望这是受访者的心意)

1.Polymorphism is a method in which a class can exist in multiple forms. 

问题修改考虑一些修改。多态性是一种概念(在某些语言中),一个类的实例可以作为许多其他类类型的一种类型存在。

解释为何如此: 例如C源自B,B源自A,A源自X,X源自System.Object(源于C#)。 (C myc = new C();)myc可以以B,A,X,Object的形式存在。 例如可以传递MYC到只接受类型A.

2.Polymorphism is a method in which a class can exist in only Two forms. 

改性问题的方法: 2' 。多态性是通过它的类的实例可以作为一种类型的只有2其他实例类型的存在的方法:

说明:类B从A然后B可以存在如A或仅System.Object的仅即衍生2其他形式。

3.Polymorphism is a method in which different instances 
of an object displays different behavior 

改性问题: 3' 。多态性是一种方式,其中不同的实例(的不同类型)的一类显示不同的行为的

说明:B选自A衍生,和A具有)方法调用CleanMe(其未在B类中重写但具有相同的签名和名称(C#需要此类方法的“新”关键字)。

现在,当你说

A myA = new B(); // instance of B exits as type A 
myA.CleanMe(); //call 1 
((B)myA).CleanMe(); //call 2 

在呼叫1和呼叫2会有不同的行为(我不是100%肯定,如果这还附带下多态性与否)

4.Polymorphism is a method in which different instances of an object display 
same behavior. 

修改的问题: 4'。多态性是类(不同类型)的不同实例显示相同行为的一种方式。

说明:B选自A衍生和A具有),其在B类重写现在

称为CleanMe(虚拟方法时,你说

A myA = new B(); // instance of B exits as type A 
myA.CleanMe(); //call 1 
((B)myA).CleanMe(); //call 2 

在呼叫1和呼叫2会有相同的行为。

+0

您对问题2的修改版本的解释稍微不正确。对于从单个父类派生的类仍然正确。如果你有一个情况,C是从B派生的,B是从A派生的? C来源于B,A和Object。考虑到问题的措词,你已经说过,它可以是一种**只有** 2个其他实例。 – ragingasiancoder 2016-06-30 17:15:13

7

完全可怕问题的方法! (从面试,不是你)

多态性是一种方法,其中...

一个什么样的方法?做什么?

一个类可以以多种形式存在。

这是一个哲学面试?对象的

不同实例的对象的

实例?哦,我的...

告诉面试官在提问之前正确地使用他的术语。我会给他的唯一答案是要么正确地改写它,要么问我“什么是多态性?”

+0

雅,但告诉我正确的答案与选项 – 2012-03-25 13:33:15

+2

@Patel Mayur:除非有人定义“可以以多种形式存在”,我无法回答,因为你可以从这句话中理解任何东西。 – Tudor 2012-03-25 13:36:01

+0

雅我知道,但是哪个是正确的,它应该是我多于一个 – 2012-03-25 13:37:11

1

我会选择第一个选项。看看这里:Polymorphism

在面向对象编程的上下文中的多态性,是能够创建一个变量,函数或具有多个表单的对象。这个词来自希腊语“πολυμορφισμός”,意思是派生“有多种形式

0

多态性,词源上讲手段有不同的形式。

IT中存在不同种类的多态性。

重载一个方法,提供两个具有相同名称但不同参数的同一个类的方法是为方法提供多个表单的一种方法。

当在C++中重载操作符时使用Adhoc多态。像a + b这样的单个语句可以有不同的形式,具体取决于wha是添加点,向量,香蕉还是整数。传统上,最强调的多态性形式是在OOP中通过继承实现Liskov替换原则。你提供一个类A和这个类的后代,sbuclasses,重写A中的一个或多个方法:surclasses将重新定义A中定义的方法,并且这个方法会被继承,它们重新定义完全相同的方法和相同的签名。

这种形式的多态性被广泛用于为软件应用程序提供扩展点,仍然尊重开放式封闭原则。

它允许之类的东西

for(Vegetal a : vegetals) 
    a.grow(); 

使用此语句将不得不增加所有vegetals的能力,它会很容易添加一个新类型植物的加入植物性的子类,并重新定义它是一个应用程序成长方法。

所以不关你的面试中回答giveb的接近一些有趣的事情,不要在那里工作;)

2

以下哪个陈述是正确的关于多态性?

没有一个。

多态性是一种方法...

所有的替代品说这一点,因此他们都意义,因为多态性不是方法。这不是Java中的方法。这不是一般英语意义上的方法。多态性是一个描述性概念,而不是一种方法或过程。

多态性是一种方法,其中一个类可以存在多种形式。

这是不正确的,因为一个类不能以多种形式存在。一个类以一种形式存在。其他类可以与类相关(例如,作为超类或子类),但它们是不同的类。

多态性是一种方法,其中一个类只能以两种形式存在。

这与上述替代方法的原因不正确。

多态性是其中不同势一个对象显示不同势行为

这是不正确,因为其目的在于(类的)的实例的实例的方法,并不能具有实例。此外,“显示不同的行为”是如此模糊以至于在没有多态性的情况下它可以适用(或不适用)。

多态性是其中不同势一个对象显示相同的行为

这是不正确的相同的理由,以前的替代的情况下的方法。


所以我们有它。没有任何陈述的选择是正确的。事实上,从术语的角度来看,没有任何替代方案是有意义的。