मेरे पास एक क्लास स्ट्रक्चर है जहां मैं बेस क्लास में सीधे कुछ कक्षाओं से बेस क्लास से प्राप्त कक्षाओं से सुलभ होना चाहता हूं, लेकिन व्युत्पन्न कक्षाओं से प्राप्त कक्षाएं नहीं। जावा भाषा विनिर्देश के अनुसार, उन्हें अधिक सार्वजनिक बनाने के लिए विरासत विधियों पर पहुंच विनिर्देशों को ओवरराइड करना संभव है, लेकिन अधिक निजी नहीं। उदाहरण के लिए, मुझे यह करने का जिक्र है कि मुझे क्या करना है, लेकिन अवैध है:जावा में विरासत विधियों तक पहुंच को छिपाना या कम करना संभव है?
// Defines myMethod
public class Base {
protected void myMethod() {}
}
// Uses myMethod and then hides it.
public class DerivedOne extends Base {
@Override
private void myMethod();
}
// can't access myMethod.
public class DerivedTwo extends DerivedOne {
}
क्या इसे पूरा करने का कोई तरीका है?
संपादित व्याख्या करने के लिए कारण है कि मैं यह करने के लिए करना चाहते हैं:
इस मामले में वर्ग संरचना एक डेटा हैंडलिंग और आयात संरचना है। यह टैब्यूलर डेटा से भरा पाठ फ़ाइलों को पढ़ता है और पार्स करता है और फिर उन्हें डेटाबेस में संग्रहीत करता है।
बेस क्लास बेस टेबल क्लास डेटाबेस प्रबंधन को प्रबंधित करने का प्रबंधन करती है। इसमें एक निश्चित मात्रा में कार्यक्षमता है जो सभी तालिका प्रकारों के लिए आम है - जैसे ही वे डेटाबेस में होते हैं, वे वर्दी बन जाते हैं।
मध्यम वर्ग फ़ाइल में पार्स किए जाने वाले फ़ाइल की तरह विशिष्ट है, और तालिका में पार्सिंग और आयात तर्क है। इसे कुछ बेस क्लास के डेटाबेस एक्सेस फ़ंक्शंस तक पहुंच की आवश्यकता है।
शीर्ष स्तर की कक्षा तालिका के लिए विशिष्ट है और तालिका के लेआउट को प्रारंभ करने के अलावा माता-पिता कक्षाएं समझने के तरीके से कुछ भी नहीं करती हैं। बेस क्लास के उपयोगकर्ताओं को मध्यम वर्ग के डेटाबेस विशिष्ट कार्यों को देखने या एक्सेस करने की आवश्यकता नहीं है। संक्षेप में, मैं इन कार्यों को केवल बेस क्लास के ऊपर एक स्तर तक प्रकट करना चाहता हूं और कोई और नहीं।
मैं पूछता हूं क्योंकि, उदाहरण के रूप में मैंने जो कोड पोस्ट किया है वह अवैध है, वही अंत करने के लिए कुछ अन्य साधन हो सकते हैं। मैं पूछ रहा हूं कि क्या है।
शायद छिपाने का यह गलत तरीका है - मुझे वास्तव में क्या करने की ज़रूरत है, कुछ कार्यक्षमता का पर्दाफाश करना है जो कक्षा वर्ग के लिए पदानुक्रम में एक स्तर तक निजी वर्ग के लिए निजी होना चाहिए। छिपाने से यह पूरा हो जाएगा - लेकिन मैं देख सकता हूं कि छुपा कैसे एक समस्या होगी। क्या इसे करने का और कोई तरीका है?
के बाद से DerivedOne एक बेस है, यह ऊपर बेस के अनुबंध के लिए होने चाहिए जिसे की है। वैसे, यही कारण है कि प्रतिनिधिमंडल (समग्र पैटर्न) अक्सर विरासत पर पसंद किया जाता है। –
@Steve मुझे विश्वास नहीं है कि समग्र पैटर्न यहां काम करेगा। संक्षेप में मुझे केवल कुछ कार्यक्षमता प्रकट करने की आवश्यकता है जो बेस क्लास के लिए एक वर्ग में निजी होनी चाहिए जो एक स्तर ऊपर है। –
मेरा जवाब अपडेट किया गया। – rsp