मेरे पास कक्षा बी है, जो कक्षा ए से विरासत में है। सुपरक्लास ए सार है, जिसमें एक सार विधि है। मैं कक्षा बी में अमूर्त विधि को लागू नहीं करना चाहता, इसलिए मुझे कक्षा बी को सार के रूप में घोषित करने की आवश्यकता है। कक्षा बी सारणी घोषित करना, दो चीजें मेरे लिए काम कर रही हैं (प्रोग्राम संकलित और सही ढंग से चलते हैं):जावा में सार कक्षाएं और विधियां, विरासत
1.) मैं कक्षा बी में किसी भी अमूर्त विधियों की घोषणा नहीं करता हूं, यहां तक कि यह भी माना जाता है कि कक्षा सार है। यह काम करता है, मुझे लगता है, क्योंकि कक्षा कक्षा ए के अमूर्त तरीके को विरासत में लेती है, और कक्षा के लिए सार के रूप में घोषित करने के लिए यह पर्याप्त है: हमें कक्षा में सीधे घोषित किसी भी अन्य अमूर्त विधियों की आवश्यकता नहीं है।
2.) मैं कक्षा बी में एक ही सार विधि घोषित करता हूं क्योंकि इसे कक्षा ए में घोषित किया गया है। यह किसी प्रकार का ओवरराइडिंग (?) है, जैसा कि जावा में ओवरराइडिंग के समान नहीं है (उसी हेडर का उपयोग करके, लेकिन विभिन्न कार्यान्वयन प्रदान करते हैं), यहां मैं बस विधि के समान हेडर का उपयोग करता हूं।
दोनों चीजें काम कर रही हैं, और मुझे यकीन नहीं है कि वे दोनों ठीक हैं या नहीं, और उनमें से कुछ को प्राथमिकता दी जाती है (अन्य सही)। क्या दो तरीके समान हैं (क्या वे जावा के समान हैं)?
यहाँ मैं, कुछ उदाहरण कक्षाएं दे तो क्या मेरा मतलब है आप के लिए और अधिक स्पष्ट है कि:
केस 1.):
public abstract class A {
public abstract String giveSum();
}
public abstract class B extends A {
}
प्रकरण 2.):
public abstract class A {
public abstract String giveSum();
}
public abstract class B extends A {
public abstract String giveSum();
}
सादर
"पाठक को भ्रमित नहीं करता है कि" अजीब नहीं है "के बजाय" एक नई विधि परिभाषित की जा रही है "के बारे में कैसे? ;-) –
"अजीब नहीं है" छोटा है :-) –