2012-03-25 147 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中的方法。這不是一般英語意義上的方法。多態性是一個描述性概念,而不是一種方法或過程。

多態性是一種方法,其中一個類可以存在多種形式。

這是不正確的,因爲一個類不能以多種形式存在。一個類以一種形式存在。其他類可以與類相關(例如,作爲超類或子類),但它們是不同的類。

多態性是一種方法,其中一個類只能以兩種形式存在。

這與上述替代方法的原因不正確。

多態性是其中不同勢一個對象顯示不同勢行爲

這是不正確,因爲其目的在於(類的)的實例的實例的方法,並不能具有實例。此外,「顯示不同的行爲」是如此模糊以至於在沒有多態性的情況下它可以適用(或不適用)。

多態性是其中不同勢一個對象顯示相同的行爲

這是不正確的相同的理由,以前的替代的情況下的方法。


所以我們有它。沒有任何陳述的選擇是正確的。事實上,從術語的角度來看,沒有任何替代方案是有意義的。