2010-11-17 19 views
42

मुझे बहुत सारे समान वर्ग बनाना है जिनके बीच केवल एक विधि अलग है। तो मुझे लगता है कि अमूर्त वर्ग बनाना इसे हासिल करने का एक अच्छा तरीका होगा। लेकिन जिस विधि को मैं ओवरराइड करना चाहता हूं (कहें, विधि foo()) का कोई डिफ़ॉल्ट व्यवहार नहीं है। मैं इस विधि को लागू करने के लिए सभी विस्तारित वर्गों को मजबूर करने के लिए किसी भी डिफ़ॉल्ट कार्यान्वयन को नहीं रखना चाहता हूं। मैं यह कैसे करु?जावा में ओवरराइड होने के तरीके को कैसे बल दें?

+0

टेम्पलेट विधि पैटर्न के कार्यान्वयन की तरह लगता है http://en.wikipedia.org/wiki/Template_method_pattern – Robin

+1

यह उन मामलों के लिए एक उत्कृष्ट प्रश्न है जहां आप सभी उप-वर्गों को अपने माता-पिता को कॉल करना चाहते हैं। ऐसा लगता है कि अब तक के जवाबों को नहीं माना गया है। उदाहरण: सुनिश्चित करें कि प्रत्येक वर्ग में एक विधि को ओवरराइड करने की आवश्यकता है और माता-पिता को कॉल करें: '@override संरक्षित शून्य महत्वपूर्ण विधि() {super.importantMethod(); ...} ' – will

उत्तर

69

आप अपने आधार वर्ग पर एक सार विधि की जरूरत है:

public abstract class BaseClass { 
    public abstract void foo(); 
} 

इस तरह, आप एक डिफ़ॉल्ट व्यवहार निर्दिष्ट नहीं करते हैं और आप गैर सार कक्षाएं BaseClass से इनहेरिट मजबूर एक कार्यान्वयन निर्दिष्ट करने के लिए foo के लिए।

+9

आपकी बेस क्लास 'बेसक्लास' ** ** होना चाहिए ** होना चाहिए। –

+0

@ द एलिट जेंटलमैन: हाँ! धन्यवाद! तय है कि। –

+3

आह सही! मैं गलत धारणा के तहत था कि अमूर्त वर्गों के पास गैर-सार तत्व नहीं हैं। धन्यवाद! –

9

बस विधि सार बनाएं।

यह सभी उप-वर्गों को इसे कार्यान्वित करने के लिए मजबूर करेगा, भले ही इसे अमूर्त वर्ग के एक सुपर क्लास में लागू किया गया हो।

public abstract void foo(); 
+0

सुपरक्लास परिदृश्य का उल्लेख करने के लिए धन्यवाद –

5

आप एक अमूर्त वर्ग है, तो अपने विधि बनाने के

public abstract void foo(); 

तब सभी उपवर्गों foo ओवरराइड करने के लिए होगा (मान लीजिए कि foo सार रूप में अच्छी तरह करते हैं)।

11

बस आधार वर्ग में एक सार विधि के रूप में foo() को परिभाषित:

public abstract class Bar { 
    abstract void foo(); 
} 

अधिक जानकारी के लिए The Java™ Tutorials (Interfaces and Inheritance) देखें।

संबंधित मुद्दे