2015-10-22 7 views
5

में सुपर क्लास सदस्य "ओवरराइड" एक नोब सवाल है, लेकिन, लेकिन मैं इसे समझ नहीं सकता।सबक्लास जावा

यह पशु.जावा है। मैं चाहता हूं कि यह सभी पशु उप-वर्गों के लिए एक सुपरक्लास बन जाए। यह सभी उप-वर्गों के समान पैकेज में है।

public class Animal { 
    protected static String call = "Animals make noises, but do not have a default noise, so we're just printing this instead."; 
     public static void sound() 
     { 
      System.out.println(call); 
     } 
} 

यह cow.java

class Cow extends Animal { 
    call = "moo"; 
} 

जाहिर है, इस नहीं चलता है। लेकिन मैं Cow.sound() को चलाने में सक्षम होना चाहता हूं और आउटपुट को "moo" पढ़ना चाहता हूं। मैं भी अपनी कक्षाओं के साथ 'कॉल' को ओवरराइड करने वाले अधिक वर्ग बनाने में सक्षम होना चाहता हूं। इसके बजाय मुझे क्या करना चाहिए?

+0

क्लास चर का उपयोग classname.variable द्वारा सीधे करें। क्योंकि स्थैतिक विधियों और चर को ओवरराइड नहीं किया जा सकता है। इसलिए यदि आप वैरिएबल को बदलना चाहते हैं तो आपको Animal.call = Shriram

+0

'शून्य ध्वनि (स्ट्रिंग कॉल) {-----} ' – Uppicharla

+0

जैसे कुछ कोशिश करने का प्रयास करें, आप कोशिश करने की बजाय ध्वनि विधि को ओवरराइड क्यों नहीं करते अपनी स्थिर विशेषता को फिर से परिभाषित करने के लिए? – christophetd

उत्तर

6

आप आवृत्ति चर को ओवरराइड नहीं कर सकते हैं। आप केवल विधियों को ओवरराइड कर सकते हैं। आप sound विधि को ओवरराइड कर सकते हैं (एक बार जब आप इसे एक इंस्टेंस विधि में बदल देते हैं, क्योंकि स्थैतिक विधियों को ओवरराइड नहीं किया जा सकता है), या आप sound कॉल (उदाहरण के लिए getSound()) को ओवरराइड कर सकते हैं। फिर प्रत्येक जानवर अपनी ही ध्वनि रिटर्न कर सकते हैं:

public class Animal { 
    static String call = "Animals make noises, but do not have a default noise, so we're just printing this instead."; 
    public void sound() 
    { 
     System.out.println(getSound()); 
    } 

    public String getSound() 
    { 
     return call; 
    } 
} 

class Cow extends Animal { 
    @Override 
    public String getSound() 
    { 
     return "moo"; 
    } 
} 
+0

होगी ... ऐसा लगता है कि @Override का उपयोग नहीं करता है, लेकिन अगर मैं नहीं करता तो यह ठीक काम करता है। एक फॉलोअप के रूप में, क्या यह स्थिर तरीकों से किया जा सकता है? चूंकि ऑब्जेक्ट्स हर बार एक ही रहते हैं, इसलिए उन्हें इंस्टेंट करने का कोई मतलब नहीं है, है ना? यह सिर्फ अधिक स्मृति का उपयोग करता है ... सही? – Skeleton

0

चर कभी नहीं ओवरराइड नहीं कर, तो उप वर्ग चर supercall चर की जगह संभव नहीं होगा। एक और विकल्प विधि को ओवरराइड करना था, लेकिन उसके स्थिर, स्थैतिक को भी ओवरराइड नहीं किया जा सकता था।

तो वर्तमान सेटअप के साथ यह तब तक संभव नहीं है जब तक कि आप गैर स्थैतिक तरीकों को ओवरराइड न करें।

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