2013-12-16 7 views
6

सुपर दोस्तों, मेरे पास एक साधारण, लेकिन सवाल है। जहां तक ​​मैं समझता हूं, static मूल रूप से इसका मतलब है कि उस वर्ग के हर एक उदाहरण के लिए, यदि हम इसे बदलते हैं, तो यह विधि वही होगी, यह उस वर्ग के हर एक उदाहरण के लिए बदल जाएगी, इसे कक्षा विधि के रूप में भी जाना जाता है। ठीक है, अगर मैं एक वर्ग को लागू करने वाली toString() विधि एक निश्चित प्रारूप डायन है, मान लें:क्यों ToString() एक स्थिर विधि नहीं हो सकता है?

public String toString() { 
    return "(" + x + "," + y + ")"; 
} 

यह के रूप में स्थिर क्यों नहीं स्थापित किया जा सकता? चूंकि यह प्रारूप उस वर्ग के हर एक उदाहरण के लिए समान होगा ...?

+6

एक्स और वाई के बारे में सोचें। यदि वे गैर स्थैतिक क्षेत्र हैं, तो एक स्थिर विधि उन्हें एक्सेस नहीं कर सकती है। –

+0

@ PatriciaShanahan तो आप कहते हैं कि यदि एक्स और वाई स्थिर मान थे, तो ToString() विधि स्थिर के रूप में सेट किया जा सकता है? –

+0

'स्थिर 'की आपकी समझ थोड़ा दूर है। 'स्थिर 'का अर्थ है कि केवल एक उदाहरण बनाया गया है (कम से कम चर के लिए)। आप ऑब्जेक्ट को तुरंत चालू किए बिना 'स्थिर 'चर/विधियों तक पहुंच सकते हैं (उदाहरण के लिए' ClassName.toString() '। इसके अलावा, आपको प्रत्येक ऑब्जेक्ट के लिए एक नई विधि बनाने की आवश्यकता नहीं है; उनके सभी में एक ही विधि उपलब्ध है – Justin

उत्तर

8

यह लागू नहीं होता है केवल करने के लिए toString()

Java Language Specification कहते

यह एक संकलन समय त्रुटि है अगर एक स्थिर विधि hides एक उदाहरण विधि।

के बाद से उदाहरण विधि toString() परोक्ष Object से प्राप्त होती है, एक उप प्रकार में static के रूप में एक विधि toString() की घोषणा एक संकलन समय त्रुटि होती है।

किसी ऑब्जेक्ट ओरिएंटेड बिंदु से, इस प्रश्न के अन्य उत्तरों या related प्रश्न देखें।

+0

उस मामले में, यह 'बराबर() ',' हैशकोड() ', आदि – Justin

+0

@Quincunx हां, किसी भी दृश्यमान विधि विधि पर लागू होता है। –

4

क्योंकि एक स्थिर विधि उदाहरण फ़ील्ड तक नहीं पहुंच सकती है। इसके अलावा, toString()java.lang.Object द्वारा निर्दिष्ट किया गया है, इसलिए आपके पास toString() पर ऑब्जेक्ट करने के लिए ऑब्जेक्ट का एक उदाहरण होना चाहिए। अंत में, यदि toString() स्थैतिक थे, तो उसे ऑब्जेक्ट के उदाहरण स्वीकार करना होगा (कक्षा के एन इंस्टेंस पर आप और कहां टूस्ट्रिंग() को कॉल कर सकते हैं?)।

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