निम्न कोड दर्शाता है कि SubClass नाम के उपवर्ग के पास staticMethod नामक एक अंतिम स्थिर सिंक्रनाइज़ विधि तक सीधी पहुंच है। इसे इसके वर्ग नाम के साथ जोड़ने की आवश्यकता नहीं है।

package synchronizedpkg;

class SuperClass
{
    public final static synchronized void staticMethod()
    {
        System.out.println("Method called.");
    }
}

final class SubClass extends SuperClass
{
    public void woof()
    {
        staticMethod();
    }
}

final public class Main
{
    public static void main(String[] args)
    {
        new SubClass().woof();
    }
}

यह विरासत के संदर्भ में कुछ हद तक भ्रमित करने वाला है क्योंकि एक अंतिम विधि विरासत में नहीं मिल सकती है और इसके परिणामस्वरूप इसके उपवर्गों द्वारा सीधे उपयोग नहीं किया जाना चाहिए। जैसा कि ऊपर दिखाया गया है, अंतिम स्थिर विधि का उसके बाल वर्ग से सीधी पहुंच कैसे होती है?

2
Lion 17 नवम्बर 2011, 00:09

5 जवाब

सबसे बढ़िया उत्तर

स्थैतिक विधि को उदाहरण विधियों की तरह ही विरासत में मिला है। जेएलएस के सेक्शन 8.4.8 से:

एक वर्ग सी अपने प्रत्यक्ष सुपरक्लास से विरासत में मिलता है और सुपरक्लास और सुपरइंटरफेस के सभी गैर-निजी तरीकों (चाहे सार या नहीं) को प्रत्यक्ष सुपरइंटरफेस से प्राप्त होता है, जो सी के समान पैकेज में डिफ़ॉल्ट पहुंच के साथ सार्वजनिक, संरक्षित या घोषित होते हैं और न ही ओवरराइड होते हैं (§8.4 .8.1) और न ही कक्षा में एक घोषणा द्वारा छिपा हुआ (§8.4.8.2)।

यह केवल उदाहरण विधियों को इनहेरिट करने के बारे में कुछ नहीं कहता है।

2
Jon Skeet 17 नवम्बर 2011, 00:27

आपकी समझ गलत है:

यह विरासत के संदर्भ में कुछ हद तक भ्रमित करने वाला है क्योंकि एक अंतिम विधि विरासत में नहीं मिल सकती है और इसके परिणामस्वरूप इसके उपवर्गों द्वारा सीधे उपयोग नहीं किया जाना चाहिए। जैसा कि ऊपर दिखाया गया है, अंतिम स्थिर विधि का उसके बाल वर्ग से सीधी पहुंच कैसे होती है?

एक अंतिम विधि को ओवरराइड नहीं किया जा सकता है, या एक स्थिर विधि छिपी के मामले में, यह अभी भी इनहेरिट की गई है। यदि आप उपवर्ग को इसे देखने से रोकना चाहते हैं, तो आपको इसे निजी बनाना होगा।

तो, यह दृश्यमान है, इसलिए आप इसे एक्सेस कर सकते हैं। और यह एक सदस्य है, इसलिए आपको इसे अर्हता प्राप्त करने की आवश्यकता नहीं है।

2
sceaj 17 नवम्बर 2011, 00:34

इंस्टेंस और कक्षा के सदस्यों को समझना से:

"जावा प्रोग्रामिंग भाषा स्थिर विधियों के साथ-साथ स्थिर चर का समर्थन करती है। स्थैतिक विधियों, जिनकी घोषणाओं में स्थिर संशोधक होता है, कक्षा के उदाहरण बनाने की आवश्यकता के बिना कक्षा के नाम से लागू किया जाना चाहिए, जैसा कि

ClassName.methodName(args)

नोट: आप किसी ऑब्जेक्ट संदर्भ के साथ स्थिर विधियों का भी उल्लेख कर सकते हैं जैसे

instanceName.methodName(args)

लेकिन यह हतोत्साहित किया जाता है क्योंकि यह स्पष्ट नहीं करता है कि वे वर्ग विधियाँ हैं।"

इसलिए, आप एक स्थिर विधि को उस उदाहरण से कॉल कर सकते हैं जो इसे प्राप्त करता है या इसके वर्ग के नाम से। इसका मतलब यह है कि सभी उद्देश्यों और उद्देश्यों के लिए, आप कल्पना कर सकते हैं कि उपरोक्त विधि स्थिर नहीं है, और आप इसे सामान्य रूप से प्राप्त कर सकते हैं।

संपादित करें: अंतिम संशोधक के रूप में, इसका मतलब यह है कि विधि को उपवर्ग में ओवरराइड नहीं किया जा सकता है। जहाँ तक मैं देख सकता हूँ, आप ऐसा नहीं कर रहे हैं, इसलिए यह परिणाम को प्रभावित नहीं करता है। आप इसके बारे में यहां पढ़ सकते हैं।

1
SuperTron 17 नवम्बर 2011, 00:30

स्थिर का अर्थ है जो सभी वस्तुओं के लिए समान है। इसलिए, इससे कोई फर्क नहीं पड़ता कि आप इसे ऑब्जेक्ट रेफरेंस या क्लास रेफरेंस के साथ कहते हैं क्योंकि यह हर ऑब्जेक्ट के लिए समान है।

उदाहरण: मान लीजिए कि आपके पास एक शिक्षक है जो सभी ग्रेड के सभी छात्रों को पढ़ाता है। इसलिए, यह वास्तव में कोई मायने नहीं रखता कि पहली कक्षा का छात्र उसे पहली कक्षा का शिक्षक कहता है और दूसरी कक्षा का छात्र उसे दूसरी कक्षा का शिक्षक कहता है या कोई और उसे स्कूल का शिक्षक कहता है। वे सभी एक ही शिक्षक का जिक्र कर रहे हैं।

छात्र उसे नाम से संदर्भित कर सकते हैं और हर दूसरा छात्र जान सकता है कि वह उसका जिक्र कर रहा है। लेकिन स्कूल के बाहर के लोग, अगर उन्हें उसे रेफर करना है तो उन्हें स्कूल का नाम और शिक्षकों का नाम बताना होगा।

इस तरह यह जावा में भी काम करता है। जावा शायद एकमात्र ऐसी भाषा है जो वास्तविक दुनिया के परिदृश्यों से संबंधित है। उम्मीद है की यह मदद करेगा..... :)

1
user2626445 23 सितंबर 2013, 23:10

static का अर्थ है वर्ग स्तर, इसका कक्षा की वस्तुओं से कोई लेना-देना नहीं है, आपको स्थिर विधियों तक पहुँचने के लिए n वस्तु की आवश्यकता नहीं है

0
daydreamer 17 नवम्बर 2011, 00:14