संभव डुप्लिकेट:
Why cant we have static method in an inner class?क्यों एक गैर स्थैतिक आंतरिक वर्ग में स्थिर सदस्य (फ़ील्ड और विधियां) नहीं हो सकती हैं?
मुझे पता है कि एक गैर स्थिर भीतरी स्तरीय वस्तु के निर्माण के एक बाहरी स्तरीय वस्तु और बनाया गैर स्थिर भीतरी स्तरीय वस्तु की आवश्यकता है स्वचालित रूप से बाहरी वर्ग की वस्तु के लिए एक छिपा संदर्भ है। लेकिन गैर स्थैतिक आंतरिक वर्ग में स्थिर सदस्य क्यों नहीं हो सकते हैं? जावा डिजाइनर को आंतरिक-वर्ग की स्थैतिक विधि के अंदर गैर स्थैतिक बाहरी वर्ग के क्षेत्रों की पहुंच को अस्वीकार करना होगा, इससे अधिक समझदारी होगी, गैर?
यदि किसी आंतरिक वर्ग में स्थिर सदस्य होने का अर्थ नहीं है, तो क्यों आंतरिक वर्ग स्थिर सदस्यों के पास एक वर्ग विरासत में स्थिर सदस्यों का उत्तराधिकारी हो सकता है?
मैंने यह post भी पढ़ा। जैसा कि उल्लेख किया गया है:
आंतरिक कक्षाएं उन स्थिर सदस्यों का उत्तराधिकारी हो सकती हैं जो संकलित समय स्थिरांक नहीं हैं, भले ही वे उन्हें घोषित न करें। नेस्टेड कक्षाएं आंतरिक कक्षाएं जावा प्रोग्रामिंग भाषा के सामान्य नियमों के साथ के अनुसार स्थिर सदस्यों को स्वतंत्र रूप से घोषित नहीं कर सकती हैं।
क्या यह एक सम्मेलन है?
public class OuterClass {
private int outerClassField;
public void doSomethingOuterClass() {
outerClassField = 1;
}
public static void doSomethingStaticOuterClass() {
// outerClassField = 2; // Error: Because static method cannot access an specific object's field
}
public class InnerClass extends ClassWithStaticField {
// Error: Why a non-static inner class cannot have static fields ?
// public static int innerClassStaticField = 1;
public void doSomethingInnerClass() {
outerClassField = 3;
staticField = 1;
}
// Error: Why a non-static inner class cannot have static methods ?
// public static void doSomethingStaticInnerClass() {
// outerClassField = 4;
// }
}
public static void main(final String[] args) {
// If it does not make sense to have static members in an inner class, why inner class can inherit statis members by inheriting a class who has static
// members?
OuterClass.InnerClass.staticField = 1;
OuterClass.InnerClass.staticMethod();
}
}
class ClassWithStaticField {
public static int staticField;
public static void staticMethod() {
};
}
यह भी देखें: http://stackoverflow.com/questions/2482327/why-can-we-have-static-final-members-but-cant-have-static-method-in-an-inner-cla – Autar