2012-05-03 2 views
5

मेरे पास एक सार वर्ग और 2 उप-वर्ग हैं। 4 कक्षाएं हैं जो सभी वर्गों से संबंधित हैं। मैं सार तत्व में फाइनल लगाने जा रहा था, लेकिन मुझे लगता है कि एक अंतिम चर विरासत में नहीं है? क्या मुझे हर वर्ग में निरंतर परिभाषित करना होगा (अक्षम लगता है)? या बस स्थिर एक त्वरित चर बनाओ (एक अच्छा विचार की तरह नहीं लगता है)?जावा- एक सारणी वर्ग में स्थिरता का उपयोग करना जिसे उप-वर्गों द्वारा उपयोग किया जाना चाहिए

इस बारे में मैं किस तरीके से जा सकता हूं?

उत्तर

10

अमूर्त वर्ग में परिभाषित किए गए निम्नलिखित सभी उप-वर्गों के लिए निम्नलिखित उपलब्ध होंगे।

public static final Integer MYCONSTANT = 42; 

या

static final Integer MYCONSTANT = 42; 

या

protected static final Integer MYCONSTANT = 42; 

दूसरा एक (पैकेज-निजी) केवल एक ही पैकेज में वर्गों के लिए उपलब्ध है। तीसरा (संरक्षित) सभी उप-वर्गों के लिए उनके पैकेज के बावजूद उपलब्ध होगा।

+0

मैंने कोशिश नहीं की है, लेकिन मुझे यकीन है कि दूसरा केवल तभी होता है जब बाल वर्ग एक ही पैकेज में हो। –

+0

@AngeloNeuschitzer हां यह सही है। – Martin

+1

फिर आपको इसे इस तरह लिखना चाहिए, ओपी शुरुआती प्रतीत होता है और भ्रमित हो सकता है। –

2

कॉन्स्टेंट बच्चों द्वारा विरासत में प्राप्त होते हैं। आपको बस protected या public रखना सुनिश्चित करना है ताकि बच्चे उन्हें एक्सेस कर सकें।

abstract class A { 
    protected final static String FOO = "bar"; 
} 
class B extends A { 
    somemethod() { 
     System.out.println("foo: " + FOO); 
    } 
} 

कक्षा और उसके सभी बच्चों से पहुंचा जा सकता है।

+1

संरक्षित का उपयोग करके मुझे जो बताया गया है उससे "आलसी" प्रोग्रामिंग है और इसका उपयोग नहीं किया जाना चाहिए। – spaz

+2

@spaz: यहां हम स्थिरांक की दृश्यता के बारे में बात करते हैं - यह वास्तव में विरासत नहीं है। आप 'कॉन्स्टेंट्स' कक्षा भी बना सकते हैं, अब तक मैंने इसे अपनी सभी परियोजनाओं में देखा है। बीटीडब्ल्यू: कॉलिंग 'संरक्षित' दृश्यता 'आलसी' संदिग्ध है ... यह सब आपकी आवश्यकताओं पर निर्भर करता है। – home

+0

@spaz जो संदर्भ पर निर्भर करता है। एक 'अंतिम' चर के लिए जो अपनी कक्षा और उसके बच्चों द्वारा सामानों को करने का सही तरीका है। तो ... असली के लिए ... थोड़ा 'आलसी' प्रोग्रामिंग क्यों होना चाहिए, वैसे भी? और इसके बजाय क्या उपयोग किया जाना चाहिए? –

0

हां वे हैं। लेकिन जैसा कि वे स्थिर हैं final and static, static modifier यह केवल एक 'प्रतिलिपि' होगा और यदि इसका उपयोग केवल उप-वर्ग में ही किया जाएगा तो आप protected का उपयोग कर सकते हैं या यदि अन्य कक्षाओं से भी इसे public बनाना चाहिए।

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