वहां पहले से ही कर रहे हैं कई तो क्यों वहाँ सार स्थिर विधि/जैसे क्षेत्र नहीं है पर सवाल, लेकिन मैं के बारे में कैसे एक निम्नलिखित छद्म-कोड को लागू करने के बारे में जाना होगा सोच रहा हूँ:"सार स्थैतिक" विधि - कैसे?
class Animal {
abstract static int getNumberOfLegs(); // not possible
}
class Chicken inherits Animal {
static int getNumberOfLegs() { return 2; }
class Dog inherits Animal {
static int getNumberOfLegs() { return 4; }
यहाँ समस्या है : मान लीजिए कि मैं यह सुनिश्चित करना चाहता हूं कि प्रत्येक श्रेणी जो Animal
को getNumberOfLegs()
विधि (यानी लगभग एक इंटरफ़ेस की तरह) को छोड़कर, मैं चाहता हूं कि अमूर्त वर्ग सभी विधियों को आम तौर पर कई विधियों को लागू करने के लिए चाहता है, इसलिए शुद्ध इंटरफ़ेस यहां काम नहीं करता है)। getNumberOfLegs()
स्पष्ट रूप से एक स्थिर विधि होना चाहिए (यह मानते हुए कि एक परिपूर्ण दुनिया में हम 'चिकन और कुत्तों को अपंग नहीं करते हैं तो getNumberOfLegs
उदाहरण-निर्भर नहीं है)।
"अमूर्त स्थैतिक" विधि/फ़ील्ड के बिना, कोई भी Animal
कक्षा से विधि को छोड़ सकता है, तो जोखिम है कि कुछ बाल वर्ग में यह विधि नहीं है। या कोई getNumberOfLegs
एक इंस्टेंस विधि बना सकता है, लेकिन तब किसी को यह पता लगाने के लिए कक्षा को तुरंत चालू करना होगा कि पशु के कितने पैर हैं - भले ही यह आवश्यक न हो।
आम तौर पर इस स्थिति को लागू करने के बारे में कैसे जाते हैं?
संपादित करें: यहां मैं इसका उपयोग कैसे कर सकता हूं। मान लें (अब यह हास्यास्पद है, लेकिन किसी भी तरह ...) कि प्रत्येक जानवर के पैरों की संख्या अद्वितीय है, इसलिए मैं कुछ की तरह हो सकता है:
Animal getModelAnimal(int numberOfLegs) {
if (numberOfLegs == Chicken.getNumberOfLegs()) return new Chicken();
else if (numberOfLegs == Dog.getNumberOfLegs()) return new Dog();
}
-1: आप आम तौर पर यह नहीं कह सकते हैं। अमूर्त विधि हमेशा गैर-समझ नहीं है (मेरी पोस्ट देखें)। – Simon
इसे प्रतिबिंबित करने के लिए मेरे उत्तर को संपादित किया गया। –
मेरा प्रश्न भाषा अज्ञेयवादी होने के लिए है (मैं पहले सी # में इसी तरह की समस्या में भाग गया)। मैं देख सकता हूं कि एक भाषा में कोई "अमूर्त स्थैतिक" संशोधक क्यों नहीं है, लेकिन मुझे यह देखने में अधिक दिलचस्पी है कि प्रश्न में मैंने जो समस्या बताई है उसे साफ तरीके से कैसे कार्यान्वित किया जा सकता है। – polyglot