मान लीजिए कि जावा इन श्रेणीबद्ध वर्ग हैं चलो: जब मैं जावा निष्पादितजावा विरासत बनाम सी # विरासत
using System;
class A
{
}
class B : A
{
public void M()
{
Console.WriteLine("B");
}
}
class C : B
{
public void M() // I need to use public new void M() to avoid the warning
{
Console.WriteLine("C");
}
}
class D : C
{
public static void Main(String[] args)
{
A a = new D();
// a.M(); // doesn't work
B b = new D();
b.M();
C c = new D();
c.M();
D d = new D();
d.M();
}
}
:
class A
{
}
class B extends A
{
public void m()
{
System.out.println("B\n");
}
}
class C extends B
{
public void m()
{
System.out.println("C\n");
}
}
class D extends C
{
public static void main(String[] args)
{
A a = new D();
// a.m(); // doesn't work
B b = new D();
b.m();
C c = new D();
c.m();
D d = new D();
d.m();
}
}
यह (अंधा) सी # में एक ही कोड के दोहराव है कोड, मुझे C-C-C
मिला जबकि सी # रिटर्न B-C-C
।
मेरे लिए सी # का परिणाम अधिक समझ में आता है, क्योंकि संदर्भ बी अपनी विधि को आमंत्रित करता है।
C-C-C
बजायB-C-C
मुद्रित करने के लिए जावा डिजाइनर के फैसले के पीछे तर्क क्या है? मेरा मतलब है, क्यों संदर्भ बी सी में ओवरराइडिंग विधि का उपयोग करता है? इस दृष्टिकोण का क्या फायदा है?- सी # करता है जैसे
B-C-C
प्रिंट करने के लिए मैं जावा कोड कैसे बदल सकता हूं? मेरा मतलब है, मैं जावा को सटीक संदर्भ की विधि का आह्वान करने के लिए कैसे सिखा सकता हूं? C-C-C
प्रिंट करने के लिए मैं सी # कोड कैसे बदल सकता हूं? मेरा मतलब है, ओवरराइडिंग विधि का आह्वान करने के लिए मैं सी # कैसे सिखा सकता हूं?
यह एक साधारण डिजाइन मुद्दा है - जावा डिफ़ॉल्ट रूप से गतिशील प्रेषण का उपयोग करता है, जबकि सी # नहीं करता है, गतिशील प्राप्त करने के लिए सी # में प्रेषण आपको एक विधि वर्चुअल घोषित करने की आवश्यकता है और इंगित करता है कि ओवरराइडिंग विधि वास्तव में इसे ओवरराइड कर रही है। – amit
डी और ए कक्षाओं में कोई समारोह नहीं है।आप उन्हें एक छोटी (स्पष्ट) नमूने के लिए छोड़ सकते हैं। जवाब के लिए –