2016-06-17 7 views
5
class Clidder { 
    private final void flipper() { 
     System.out.println("Clidder"); 
    } 
} 
public class Clidlet extends Clidder { 
    public final void flipper() { 
     System.out.println("Clidlet"); 
    } 
    public static void main(String args[]) { 
     new Clidlet().flipper(); 
    } 
} 

परिणाम क्या है में काम करता है? इस प्रश्न के लिए मुझे उम्मीद है कि "संकलन विफल हो जाता है" क्योंकि अंतिम विधि को ओवरराइड नहीं किया जा सकता है और यह विरासत की अनुमति नहीं देता है। लेकिन जवाब "क्लिडेट" था क्यों? क्या मैंने इस अवधारणा में कुछ गलत समझा। यह आउटपुट कैसे हो सकता है? कृपया समझाएँ।सटीक तरीका कैसे अंतिम तरीकों जावा

+0

दिलचस्प किनारे का मामला। अंगूठे का नियम: बस ऐसा मत करो :) – dimo414

+0

यदि आप वास्तव में अंतिम निकालें 'निजी' कीवर्ड – emotionlessbananas

उत्तर

4

निजी संशोधक इंगित करता है कि क्लिडर के वर्ग में फ्लीपर() की विधि को बाल वर्ग क्लिडलेट से नहीं देखा जा सकता है। तो यह ओवरराइड नहीं है लेकिन सिर्फ बाल वर्ग में एक नई विधि घोषणा की तरह दिखता है। निजी विधि/क्षेत्र ओवरराइड नहीं किया जा सकता है क्योंकि इसे देखा नहीं जा सकता है।

+0

पुhew को देखना चाहते हैं! मैं धोखा दिया गया। व्याख्या करने के लिए धन्यवाद। – vidya

1

private विधियों को ओवरराइड नहीं किया गया है, इसलिए यहां कोई ओवरराइड नहीं है, इसलिए final का कोई उल्लंघन नहीं है। वास्तव में finalprivate विधि पर अर्थहीन, या अनावश्यक है, अपना चयन करें।

0

उत्तर "क्लिडेट" होना चाहिए क्योंकि आपकी अंतिम विधि में private एक्सेस संशोधक है जो इसे बाल वर्ग के लिए अदृश्य बनाता है। Clidlet कक्षा में फ्लिपर विधि प्रभावी रूप से मूल वर्ग में एक ही विधि को छुपा रही है। यह काफी खतरनाक है क्योंकि परिणाम इस पर निर्भर करेगा कि इसे सुपरक्लास या उप-वर्ग से बुलाया गया है या नहीं।

Clidlet clidlet = new Clidlet(); 
clidlet.flipper(); // prints Clidlet 

Clidder clidder = new Clidlet(); 
clidder.flipper(); // prints Clidder 
0

इस मामले private कीवर्ड में विधि तक पहुँचने से उपवर्ग से बचाता है। नतीजतन Clidlet विधि गुणों के बारे में Clidder पूछता है, "मैं इसे निजी रखता हूं" प्रतिक्रिया प्राप्त करता है और इसकी अपनी विधि निष्पादित करता है।

इस मामले में उदाहरण देकर स्पष्ट तथ्य यह है कि private पछाड़ final (की तुलना में अधिक प्राथमिकता है), कि private final == private और भ्रम यह करने के लिए नेतृत्व कर सकते हैं यह दर्शाता है कि।

+0

निजी + अंतिम का उपयोग कम है लेकिन यह कानूनी है? अगर कोई निजी कीवर्ड नहीं था और केवल अंतिम तो जवाब संकलन विफल रहता है, क्या मैं सही हूँ? – vidya

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