/ / ओवरराइडिंग एक अमूर्त वर्ग द्वारा विधि को बराबर करता है और इसे सार के रूप में सेट करता है ताकि यदि कोई वर्ग विस्तारित हो, तो उसे लागू करना होगा - जावा, इंटरफ़ेस, अमूर्त-वर्ग, ओवरराइड, सार-विधियां

ओवरराइडिंग एक अमूर्त वर्ग द्वारा विधि को बराबर करता है और इसे सार के रूप में सेट करता है ताकि यदि कोई वर्ग विस्तारित हो, तो उसे लागू करना होगा - जावा, इंटरफेस, अमूर्त-वर्ग, ओवरराइड, सार-विधियां

मैं एक अमूर्त वर्ग / इंटरफ़ेस बनाने की कोशिश कर रहा हूं जो पहले से मौजूद विधियों को ओवरराइड करता है और उन्हें सार के रूप में सेट करता है। क्या यह संभव है?

कोड उदाहरण:

public abstract class Box {
@Override
public abstract boolean equals(Object o);
}

या

public interface Box {
@Override
boolean equals(Object o);
}

उपरोक्त दोनों वर्गों और इंटरफेसों में एक ही कार्य होना चाहिए, लेकिन क्या इसका मतलब ऑब्जेक्ट बराबर विधि को ओवरराइड करता है? भले ही मैं इसे सार के रूप में सेट करता हूं?

तो यह काम करेगा:

public class Tea extends Box {
@Override
public boolean equals(Object o) {
// TODO Auto-generated method stub
return false;
}
}

उत्तर:

जवाब के लिए 0 № 1

सबसे पहले, इंटरफेस विधियों को ओवरराइड नहीं करते हैं। तो आप ओवरराइड नहीं कर सकते हैं equals से Object एक जोड़कर equals एक इंटरफेस के लिए विधि। इसके बजाय इंटरफेस को अनुबंध के रूप में सोचा जा सकता है, वे गारंटी देते हैं कि उन्हें लागू करने वाले किसी गैर-अमूर्त वर्ग में सभी इंटरफेस विधियां होंगी (या तो सीधे या विरासत के माध्यम से)।

विरासत के माध्यम से एक विधि सार बनाने के संबंध में, आप वास्तव में ऐसा कर सकते हैं। तो ओवरराइड करने का आपका उदाहरण equals आपके सार बॉक्स वर्ग में एक अमूर्त परिभाषा के साथ विधि किसी वर्ग को विस्तारित करेगी Box एक लागू करने के लिए है equals तरीका।

और @OskarEmilsson ने टिप्पणी की, अगर आप ऐसा करते हैं तो आपको भी मजबूर होना चाहिए hashCode बराबर के बाद से लागू किया जाना चाहिए और हैशकोड एक दूसरे के साथ संगत होना चाहिए (वस्तुओं के बराबर बराबर हैशकोड होना चाहिए)।