2012-06-11 13 views
10

यह सिर्फ जिज्ञासा से बाहर एक सवाल है।जावा बहुरूपता

मैं जानता हूँ कि जब हम संदर्भ की यह सुपर क्लास है द्वारा एक उपवर्ग वस्तु की ओवरराइड विधि कॉल, JVM वस्तु के प्रकार को महत्व देता है और संदर्भ की टाइप करने के लिए नहीं है।

run: 
Animal is eating... 
Horse is eating... 
BUILD SUCCESSFUL (total time: 0 seconds) 

अब मेरे सवाल है, वहाँ किसी भी तरह से है कि हम संदर्भ ज उपयोग कर सकते हैं कॉल कर सकता:

class Animal 
{ 
    void eat() 
    { 
     System.out.println("Animal is eating..."); 
    } 
} 
class Horse extends Animal 
{ 
    @Override 
    void eat() 
    { 
     System.out.println("Horse is eating..."); 
    } 
} 
public class PolymorphismTest 
{ 
    public static void main(String...args) 
    { 
     Animal a=new Animal(); 
     a.eat(); 

     Animal h= new Horse(); 
     h.eat(); 
    } 
} 

जैसी उम्मीद थी, मैं उत्पादन प्राप्त करें:

यह मेरा सरल कोड है superclass खाने() विधि और उपclass एक नहीं? मुझे पता है कि यह एक प्रश्न है जो कुछ हद तक बहुरूपता के नियमों के खिलाफ है लेकिन आप कभी नहीं जानते कि ऐसा करने के लिए आवश्यकता कब उत्पन्न हो सकती है।

मैं पशु लेकिन कोई भाग्य के संदर्भ ज टाइपकास्ट करने की कोशिश की। कोई विचार?

+0

http://stackoverflow.com/questions/5411434/how-to-call-a-superclass-method-using-java-reflection –

+2

की संभावित डुप्लिकेट और यह भी http के संभावित डुप्लिकेट: // stackoverflow। कॉम/प्रश्न/1032847/कैन-जावा-कॉल-पैरेंट-ओवरराइड-विधि-इन-ऑब्जेक्ट्स-लेकिन-नहीं-सबटाइप –

+0

मैं सहमत हूं। इसके माध्यम से नहीं जाने के लिए खेद है। मैंने कुछ शोध किया लेकिन यह नहीं मिला। – Kameron

उत्तर

5
class Horse extends Animal 
{ 
    @Override 
    void eat() 
    { 
     super.eat(); 
    } 
} 
+0

हां, किसी को बहुरूपता के नियमों का पालन करने के लिए अभिभावक वर्ग के कार्यान्वयन को नहीं बुलाया जाना चाहिए। मैं इस लिंक को दोबारा पेस्ट कर दूंगा: http://stackoverflow.com/questions/1032847/can-java-call-parent-overridden-method-in-other-objects-but-not-subtype –

4

नहीं, आप स्पष्ट रूप से ओवरराइड विधि (अर्थात super.eat()) में ऐसा करना होगा।

2

आप typecasting के किसी भी रूप करने से ऐसा नहीं कर सकते। आपका एक ही रास्ता सुपर क्लास की विधि कॉल करने के लिए या तो यह रैप करने के लिए की तरह ब्रेट होल्ट से पता चला है, या आप एक वस्तु जिसका सबसे विशिष्ट क्रम प्रकार पशु है होना आवश्यक है।

2

जावा में - सभी विधियां वर्चुअल विधियां हैं जो फ़ंक्शन को कॉल करते समय सबसे हालिया कार्यान्वयन का उपयोग किया जाता है।

अपने प्रश्न का उत्तर देने के लिए, कृपया पशु वर्ग में विधि static बनाएं, फिर आपको पशु वर्ग की खाने की विधि मिल जाएगी।

static void eat(){ 
     System.out.println("Animal is eating..."); 
} 
संबंधित मुद्दे