2013-07-01 7 views
35

जावा प्रोग्रामिंग में, क्या हम एक अमूर्त वर्ग की स्थिर विधि कह सकते हैं?
हाँ मुझे पता है कि हम एक अमूर्त वर्ग की विधि के साथ स्थिर का उपयोग नहीं कर सकते हैं। लेकिन मैं जानना चाहता हूं क्यों ..?क्या हम एक अमूर्त वर्ग में स्थिर विधि का उपयोग कर सकते हैं?

abstract class Foo { 
    static void bar() { } 
} 

यह अनुमति दी है, क्योंकि उस विधि सीधे कहा जा सकता है, भले ही आप अमूर्त वर्ग का एक उदाहरण नहीं है:

उत्तर

41

जावा में आप एक अमूर्त वर्ग में एक स्थिर विधि हो सकता है

Foo.bar(); 

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

abstract class Foo { 
    abstract static void bar(); 
} 

// Calling a method with no body! 
Foo.bar(); 

एक इंटरफ़ेस में, सभी विधियां implicitly abstract हैं। यही कारण है कि एक इंटरफ़ेस एक स्थिर विधि घोषित नहीं कर सकता है। (कोई वास्तु कारण है कि एक अंतरफलक एक स्थिर विधि नहीं सकता है, लेकिन मैं JLS के लेखकों का मानना ​​था कि कि इंटरफेस के दुरुपयोग को प्रोत्साहित करेगा संदेह है)

+11

नोट: जावा 8 के रूप में, आप इंटरफ़ेस में स्थिर और डिफ़ॉल्ट विधियों की घोषणा कर सकते हैं – user2243357

17

आप जावा बारे में बात कर रहे हैं, तो जवाब हाँ है लेकिन आपको स्थैतिक विधि को परिभाषित करने की आवश्यकता है। आप एक अमूर्त स्थैतिक विधि नहीं बना सकते हैं। आप क्या बना सकते हैं गैर अमूर्त स्थैतिक विधि है।

कारण आपको स्थिर विधि तक पहुंचने के लिए ऑब्जेक्ट इंस्टेंस की आवश्यकता नहीं है, इसलिए आपको किसी निश्चित कार्यक्षमता के साथ परिभाषित करने की विधि की आवश्यकता है।

ताकि आप नहीं हो सकता,

abstract class AbstractClassExample{ 
    abstract static void method(); 


} 

लेकिन तुम हो सकता है,

abstract class AbstractClassExample{ 

    static void method(){} 
} 

आशा इस मदद करता है ...

2

हाँ, बेशक आप सार में स्थिर विधि परिभाषित कर सकते हैं कक्षा। आप अमूर्त वर्ग का उपयोग करके या उस वर्ग वर्ग का उपयोग करके उस स्थिर विधि को कॉल कर सकते हैं जो अमूर्त वर्ग को बढ़ाता है। साथ ही आप बाल वर्ग के उदाहरण/वस्तु के माध्यम से स्थैतिक विधि को कॉल करने में सक्षम हो सकते हैं। उदाहरण के बाद आगे परीक्षण का वर्णन करने के लिए।

//Parent class 
public abstract class TestAbstractClass { 
    static void testStaticMethod(){ 
     System.out.println("In Parent class static method"); 
    } 
} 

//child class 
public class ChildClass extends TestAbstractClass { 
    public static void main(String[] args) { 
     TestAbstractClass parentObj = new ChildClass(); 
     parentObj .testStaticMethod(); 
     ChildClass childObj = new ChildClass(); 
     childObj.testStaticMethod(); 
     TestAbstractClass.testStaticMethod(); 
     childClass.testStaticMethod(); 
    } 
} 
1

यहाँ एक सरल explanation.Abstract तरीकों लागू किया जाना चाहिए later.We पता है कि स्थिर तरीकों ओवरराइड नहीं किया जा सकता है, क्योंकि स्थिर तरीकों किसी विशेष उदाहरण से संबंधित नहीं है, बल्कि यह की class.Then विभिन्न कार्यान्वयन के अंतर्गत आता है अमूर्त विधि, जो स्थैतिक है, अलग-अलग वर्गों में प्रति-अंतर्ज्ञानी है।

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

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