जावा में स्थिर तरीके हमेशा संकलित समय पर हल हो जाती हैं?क्या जावा में स्थैतिक विधियां हमेशा संकलित समय पर हल होती हैं?
उत्तर
संक्षिप्त उत्तर: हाँ
मैं Java Language Specification का सही अनुभाग देखने के लिए सक्षम नहीं था। कृपया मदद करे। :)
हां, लेकिन यदि स्थिर विधि को रनटाइम द्वारा हटा दिया गया है तो बेस क्लास में मिलान विधि को कॉल किया जाएगा (नाम और हस्ताक्षर मूल विधि को संकलित समय से बिल्कुल मेल खाना चाहिए, और विधि JVM द्वारा सुलभ होनी चाहिए spec नियम)।
स्पष्ट करने के लिए बुला कोड पर विचार करें:
Derived.fn();
और निम्नलिखित बुलाया कोड:
class Base {
public static void fn() {
System.err.println("Base");
}
}
class Derived extends Base {
public static void fn() {
System.err.println("Derived");
}
}
प्रिंटों Derived
।
अब, मैं सब कुछ संकलित करता हूं।
class Derived extends Base {
}
प्रिंटों Base
: तो बस व्युत्पन्न पुन: संयोजित करने के लिए बदल दिया है।
शायद तब मैं सिर्फ व्युत्पन्न पुन: संयोजित बदल रहे हैं:
class Derived {
}
एक त्रुटि फेंकता।
"रनटाइम द्वारा हटाया गया"? इसका क्या मतलब है? –
मुझे लगता है कि इसका मतलब है: यदि वर्ग को Sub.x() पर कॉल करने के लिए संकलित किया गया है, तो x() विधि उप से हटा दी जाती है लेकिन कॉलर क्लास को पुन: संकलित नहीं किया जाता है, रनटाइम Base.x() पर लागू किया जाएगा वह मौजूद है। – erickson
+1 शायद यह इस प्रश्न का सही दृष्टिकोण है – dfa
कई उद्धरण:
"संकलक उस वर्ग यह संकलन समय जो सटीक तरीका प्रत्येक स्थिर विधि कॉल (कि गैर स्थैतिक विधि के लिए बड़ा अंतर है कॉल के लिए कहा जाता है पर निर्णय लेता है संकलित है: होने के लिए सटीक तरीका कहा जाता है केवल उन मामलों में रनटाइम पर फैसला किया जाता है)। "
"केवल स्थिर विधियों को कॉल करना संकलन-समय प्रकार पर निर्भर करता है जिस पर इसे कहा जाता है।"
प्रश्न के लिए सही उत्तर, लेकिन रनटाइम पर केवल गैर-स्थैतिक विधियों के बारे में उद्धरण गलत है। रनटाइम पर केवल ओवरराइड विधियों का निर्णय लिया जाता है, अन्य ओवरराइड सहित संकलित समय पर निर्धारित होते हैं। – Robin
@ रोबिन: उद्धरण मेरा नहीं है, अच्छा बिंदु हालांकि :) –
लिंक मृत लगता है –
कृपया, नियम लागू नहीं होने पर कोई डोडी केस है? –
एक और संक्षिप्त उत्तर: संख्या –
@ जोओओ: जावा स्थैतिक संशोधक का अर्थ है "संकलन-समय पर"। विधि/चर वर्ग के नाम पर स्थिर रूप से बाध्य है। कोई अपवाद नहीं। – dfa