2011-12-11 15 views
18

मेरे पास दो वर्ग हैं जो समान सार वर्ग का विस्तार करते हैं। उन्हें दोनों एक ही स्थिर की जरूरत है, लेकिन विभिन्न मूल्यों के साथ। मैं यह कैसे कर सकता हूँ? कुछ उदाहरण कोड दिखाने के लिए जो मैं करना चाहता हूं।जावा में कॉन्सटेंट ओवरराइडिंग

abstract class A { 
    public static int CONST; 
} 

public class B extends A { 
    public static int CONST = 1; 
} 

public class C extends A { 
    public static int CONST = 2; 
} 

public static void main(String[] args){ 
    A a = new B(); 
    System.out.println(a.CONST); // should print 1 
} 

उपर्युक्त कोड संकलित नहीं होता है क्योंकि कॉन्स्ट को इंट क्लास ए शुरू नहीं किया गया है। मैं इसे कैसे काम कर सकता हूं? CONST का मूल्य बी के सभी उदाहरणों के लिए 1 होना चाहिए, और सी के सभी उदाहरणों के लिए 2 और ए के सभी उदाहरणों के लिए 1 या 2 होना चाहिए। क्या इसके लिए statics का उपयोग करने का कोई तरीका है?

उत्तर

21

आप ऐसा नहीं कर सकते हैं।

आप ऐसा कर सकते हैं, हालांकि: एक निरंतर एक चर महत्व है

abstract class A { 
    public abstract int getConst(); 
} 

public class B extends A { 
    @Override 
    public int getConst() { return 1; } 
} 

public class C extends A { 
    @Override 
    public int getConst() { return 2; } 
} 

public static void main(String[] args){ 
    A a = new B(); 
    System.out.println(a.getConst()); 
} 
+0

धन्यवाद! मैं बस चाहता हूं कि मैं स्थिर का उपयोग कर सकूं, क्योंकि मान बी के दूसरे उदाहरण से अलग नहीं होते हैं। – Fractaly

+0

@ फ्रैक्टली: लेकिन वे 'ए' के ​​उदाहरण से दूसरे में भिन्न होते हैं। –

+1

प्राप्त नहीं होना चाहिए() में एक सार होना चाहिए? – Fractaly

5

हैं, तो यह एक निरंतर नहीं रह गया है। स्टेटिक फ़ील्ड और विधियां पॉलिमॉर्फिक नहीं हैं। आप जो चाहते हैं उसे करने के लिए आपको एक सार्वजनिक विधि का उपयोग करने की आवश्यकता है।

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