2012-04-16 13 views
13

यह मेरी समझ है कि पैरामीट्रिक पॉलिमॉर्फिज्म एक ऐसी तकनीक है जो विभिन्न प्रकार के डेटा (प्रकारों) पर समान क्रियाओं की अनुमति देती है। क्या मेरा ज्ञान सही है?जावा में पैरामीट्रिक बहुरूपता क्या है (उदाहरण के साथ)?

क्या यह उदाहरण पैरामीट्रिक बहुरूपता है? मेरा मानना ​​है कि यह तब से है जब Animal.talk विशिष्ट पशु प्रकार (बिल्ली या कुत्ते) के बावजूद बात करने की अनुमति देता है।

public interface Animal 
{ 
    public String talk(); 
} 

public class Cat implements Animal 
{ 
    public String talk() 
    { 
    return "Cat says Meow!"; 
    } 
} 

public class Dog implements Animal 
{ 
    public String talk() 
    { 
    return "Dog says Woof! Woof!"; 
    } 
} 

import java.util.*; 

public class PolymorphismExample 
{ 
    public static void main(String[] args) 
    { 
    Collection<Animal> animals = new ArrayList<Animal>(); 
    animals.add(new Cat()); 
    animals.add(new Dog()); 
    for (Animal a : animals) 
    { 
     System.out.println(a.talk()); 
    } 
    } 
} 

सम्मान।

संपादित करें: यदि मेरा उदाहरण विशेष रूप से पैरामीट्रिक पॉलीमोर्फिज्म का प्रदर्शन नहीं कर रहा है तो कृपया आप एक प्रदान करेंगे? धन्यवाद।

+0

सही दिखता है। असल में, आप पशु प्रकार के आधार पर अपने वास्तविक प्रकार के संबंध में बिल्ली और कुत्ते का इलाज करते हैं। – dvallejo

+2

एक हास्केलर के रूप में, मैं उस पैरामीट्रिक बहुरूपता को नहीं बुलाऊंगा। एक पैरामीट्रिक बहुरूपी समारोह की तरह 'LinkedList रिवर्स (LinkedList )' कुछ है कि _parameter_ सभी प्रकार 'T' के लिए ही काम करता होगा। एक पैरामीट्रिक पॉलिमॉर्फिक फ़ंक्शन इंटरफ़ेस विधियों को कॉल नहीं कर सकता है। –

उत्तर

18

"पैरामैट्रिक पॉलिमॉर्फिज्म" जावा में "जेनेरिक" के लिए एक और शब्द है। विचार सरल है: आप बताते हैं कि प्रकार किसी विशेष वर्ग द्वारा उपयोग किया जाएगा, इसका स्पष्ट उदाहरण java.util पैकेज के सभी संग्रहों में मौजूद है।

जावा में जेनेरिक की सभी बारीकियों को सीखने के लिए, मैं एंजेलिका लैंगर के FAQ की अत्यधिक अनुशंसा करता हूं, यह विनिर्देश के हर कोने की पड़ताल करता है।

Collection<Animal> animals = new ArrayList<Animal>(); 

एक संग्रह किसी भी वस्तु एक जानवर है कि पकड़ करने के लिए निर्दिष्ट किया जाता है:

अपने कोड में, इस लाइन जेनरिक का उपयोग करने का एक उदाहरण है।

3

सटीक रूप से। पैरामैट्रिक पॉलिमॉर्फिज्म आम तौर पर जेनेरिक/टेम्पलेट्स को संदर्भित करता है।

विकिपीडिया से:

पैरामीट्रिक पोलिमोर्फ़िज्मके, एक समारोह या एक डेटा प्रकार का उपयोग करना हूबहू उनकी प्रकार के आधार पर बिना सामान्य रूप से इतना है कि यह मान संभाल कर सकते हैं लिखा जा सकता है।

+2

क्यों यह पेज करता है: http://en.wikipedia.org/wiki/Polymorphism_(computer_science) उप-प्रकार बहुरूपता तो के रूप में उदाहरण दिखाते हैं? उपप्रकार बहुरूपता और पैरामीट्रिक बहुरूपता के बीच क्या अंतर है? –

+0

@DannyRancher आप क्या किया था, दूसरा विचार पर, और अधिक बहुरूपता (बहुरूपता विरासत के आधार पर) उप-प्रकार के सदृश है। पैरामीट्रिक बहुरूपता है, जब आप, किसी भी वर्ग या समारोह जेनरिक का उपयोग कर लिखना इतना है कि यह एक से अधिक वर्ग है कि यह एक सामान्य पैरामीटर (जैसे LinkedList ) के रूप में प्राप्त कर सकते हैं के लिए काम करता है। –

+0

@DannyRancher मैंने अंतर को स्पष्ट करने के लिए मेरे उत्तर में कुछ विवरण जोड़ा। – trutheality

6

विकिपीडिया:

प्रोग्रामिंग भाषाओं और प्रकार सिद्धांत रूप में, पैरामीट्रिक पोलिमोर्फ़िज्मके, एक भाषा अधिक अर्थपूर्ण बनाने के लिए, जबकि अभी भी पूर्ण स्थिर प्रकार-सुरक्षा को बनाए रखने के लिए एक रास्ता है। पैरामीट्रिक पॉलिमॉर्फिज्म का उपयोग करके, एक फ़ंक्शन या डेटा प्रकार सामान्य रूप से लिखा जा सकता है ताकि यह उनके प्रकार के आधार पर समान रूप से मूल्यों को संभाल सके। इस तरह के कार्यों और डेटा प्रकारों को क्रमशः जेनेरिक फ़ंक्शंस और जेनेरिक डेटाटाइप कहा जाता है और जेनेरिक प्रोग्रामिंग का आधार बनता है।

तो एक महान उदाहरण मानक जावा लाइब्रेरी संग्रह है।

उदाहरण के लिए, Collections.sort घोषित किया जाता है के रूप में:

public static <T extends Comparable<? super T>> void sort(List<T> list) 

यह प्रकार T की वस्तुओं की एक सूची है कि अन्य T के लिए तुलनीय है लेने के लिए और सूची सॉर्ट कर सकते हैं, के बारे में T वास्तव में है कि किस प्रकार चिंता किए बिना ।

यह उप-प्रकार बहुरूपता से अलग है: उप-प्रकार बहुरूपता तथ्य द्वारा उदाहरण है कि sortList किसी भी प्रकार का समय लग सकता है - एक ArrayList, एक LinkedList, आदि