होने इन कक्षाओं:superclass वस्तुओं के ऐरे। Subclass वाले के रूप में उन्हें कैसे प्रबंधित करें?
public abstract class Furniture
public class Chair : Furniture
public class Table : Furniture
public class Kitchen
{
ArrayList <Furniture> furnitures;
//other code
public void function()
{
Furniture furniture = furnitures.get();
doSomethingInKitchen(furniture);
}
private void doSomethingInKitchen (Chair c);
private void doSomethingInKitchen (Table t);
}
मैं सबसे अच्छा अभ्यास है कि मुझे भरोसा दिलाते एक उपवर्ग एक (अध्यक्ष या तालिका) के रूप में सुपर क्लास फर्नीचर वस्तु में हेरफेर करने के लिए देख रहा हूँ।
मैंने एक साधारण कलाकार के साथ प्रयास किया, लेकिन जब मैं फ़ंक्शन को कॉल करता हूं तो यह फर्नीचर ऑब्जेक्ट के साथ संचालित होता है, न कि टेबल या चेयर के साथ।
for each Furniture in Array List
if(furniture.get() istance of Table)
{
currentFurniture = (Table) furniture.get();
}
else if (furniture.get() istanceof Chair)
{
currentFurniture = (Chair) furniture.get();
}
doSomethingInKitchen(currentFurniture)
मैं अगर समस्या यह है कि currentFurniture रूप
Furniture currentFurniture;
घोषित किया जाता है और इसलिए यह अध्यक्ष के रूप में मान्यता प्राप्त नहीं किया जाएगा या नहीं पता है:
मैं क्या करने की कोशिश की कुछ की तरह है कास्टिंग के बावजूद तालिका या समाधान के डिजाइन स्वयं गलत है।
पॉलिमॉर्फिज्म ऑब्जेक्ट के प्रकार के आधार पर काम करता है ** जिस पर ** विधि कहा जाता है। विधि के तर्क के प्रकार पर नहीं। यह 'furniture.do SomethingInTheKitchen()' होना चाहिए। एएसओ, जावा में त्रुटियों के बारे में पूछते समय वास्तविक जावा कोड पोस्ट करें, छद्म कोड नहीं। –
जेबीबीज़ेट ने जो कहा है उस पर बस एक पूरक: आपके उदाहरण में, मान लीजिए कि आप अपनी वस्तु का "उपयोग" करते हैं। इस तरह, आप '(रसोई वस्तु) .furniture.get() का उपयोग कर सकते हैं(); इस प्रकार, यदि कोड मौजूद है तो चिंता किए बिना, आप ऊपरी और निचले वर्गों को कोड कर सकते हैं। – Bonatti