क्या यह सच है कि ठोस तरीकों को ओवरराइड करना एक कोड गंध है? क्योंकि मुझे लगता है कि अगर आपको ठोस तरीकों से आगे निकलने की जरूरत है:
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
इसे फिर से लिखा जा सकता है
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
और यदि B A में पुन: उपयोग करना चाहता है (तो) इसे फिर से लिखा जा सकता है:
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
जो विधि को ओवरराइड करने के लिए विरासत की आवश्यकता नहीं है, क्या यह सच है?
virtual
ओवरराइड का समर्थन करने के लिए कीवर्ड का उपयोग करना होगा । इसलिए, इस मुद्दे को भाषा के विवरण से अधिक (या कम) अस्पष्ट बना दिया जाता है।
final
है कि इन जैसी स्थितियों के लिए संशोधक बिल्कुल मौजूद है। यदि विधि का व्यवहार ऐसा है कि इसे ओवरराइड करने के लिए डिज़ाइन नहीं किया गया है, तो इसे चिह्नित करें final
। अन्यथा, उम्मीद करें कि डेवलपर्स इसे ओवरराइड करने का विकल्प चुन सकते हैं।