एंड्रॉइड में मैं एक अमूर्त वर्ग बनाता हूं जो View
(एक एंड्रॉइड क्लास जिसमें मुझे कोई एक्सेस नहीं है) बढ़ाता है। सार वर्ग दृश्यक्या अंतिम कीवर्ड को विरासत/ओवरराइड विधि में जोड़ने के लिए "ठीक" है?
@Override
protected final void onDraw(Canvas canvas) {
if(conditions) return;
// child classes should only draw if this class gives the ok
subDraw(canvas);
}
protected abstract void subDraw(Canvas canvas);
लेकिन मैं अंतिम कीवर्ड यहां जोड़ ओवरराइड करता है।
बिंदु यह है कि, मैं एक अमूर्त विधि बनाता हूं जो सबक्लास को ऑनड्रा के बजाय उपयोग करना चाहिए। इसलिए मैं ऑनड्रा को किसी भी आगे ओवरराइड होने से रोकता हूं और यह काम करता है।
मुझे पता है कि इसे बेहतर बनाने के लिए डिज़ाइन हैं, हालांकि यह बहुत सारे बदलाव के बिना आकर्षण की तरह काम करता है। मेरा प्रश्न सामान्य रूप से सामान्य है यदि उपर्युक्त करने से रनटाइम या अन्य मुद्दों पर अवांछित दुष्प्रभाव होते हैं?
हाँ, यदि वह 'व्यवहार जो आप चाहते हैं और आप जानते हैं कि आप क्या कर रहे हैं – Blackbelt
यह वही है जो मैं चाहता हूं – NikkyD
साइड इफेक्ट यह है कि यह आपके उप-वर्गों को (इकाई-) परीक्षण को कठिन बनाता है। ऐसा इसलिए है क्योंकि आप इस विधि का नकल नहीं कर सकते हैं। और इसलिए आप इस कक्षा के व्यवहार से उप-वर्ग व्यवहार को अलग नहीं कर सकते हैं। इसे हल करने के तरीके हैं, लेकिन "विरासत पर अनुकूलता" दृष्टिकोण का उपयोग करके आपका आवेदन डिज़ाइन सबसे अच्छा होगा। –