मैं यह जानना चाहता हूं कि जावा स्टैबल फील्ड्स / मेथड्स को अंदर की कक्षाओं के लिए मना क्यों करता है
क्योंकि वे आंतरिक वर्ग "उदाहरण" हैं जो आंतरिक कक्षाएं हैं। यही है, वे संलग्न वस्तु के एक उदाहरण विशेषता की तरह हैं।
चूंकि वे "उदाहरण" वर्ग हैं, इसलिए staticसुविधाओं को अनुमति देने का कोई मतलब नहीं है, क्योंकि staticपहली जगह में उदाहरण के बिना काम करना है।
यह ऐसा है जैसे आप एक ही समय में एक स्थिर / इंस्टेंस विशेषता बनाने की कोशिश करते हैं।
निम्नलिखित उदाहरण लें:
class Employee {
public String name;
}
यदि आप कर्मचारी के दो उदाहरण बनाते हैं:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
यह स्पष्ट है कि संपत्ति के लिए प्रत्येक का अपना मूल्य क्यों है name, है ना?
भीतर के वर्ग के साथ भी ऐसा ही होता है; प्रत्येक आंतरिक वर्ग उदाहरण अन्य आंतरिक वर्ग उदाहरण से स्वतंत्र है।
इसलिए यदि आप एक counterवर्ग विशेषता बनाने का प्रयास करते हैं , तो उस मूल्य को दो अलग-अलग उदाहरणों में साझा करने का कोई तरीका नहीं है।
class Employee {
public String name;
class InnerData {
static count;
}
}
जब आप उदाहरण aऔर bउपरोक्त उदाहरण बनाते हैं , तो स्थिर चर के लिए एक सही मूल्य क्या होगा count? इसे निर्धारित करना संभव नहीं है, क्योंकि InnerDataकक्षा का अस्तित्व पूरी तरह से प्रत्येक संलग्न वस्तुओं पर निर्भर करता है।
इसीलिए, जब वर्ग के रूप में घोषित किया जाता है static, तो उसे खुद को जीने के लिए एक जीवित उदाहरण की आवश्यकता नहीं होती है। अब जब कोई निर्भरता नहीं है, तो आप स्वतंत्र रूप से एक स्थिर विशेषता की घोषणा कर सकते हैं।
मुझे लगता है कि यह दोहराव लगता है लेकिन यदि आप उदाहरण बनाम वर्ग विशेषताओं के बीच के अंतर के बारे में सोचते हैं, तो यह समझ में आएगा।