Avendo queste classi:Matrice di oggetti della superclasse. Come gestirli come sottoclassi?
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);
}
Sto cercando la migliore pratica che mi assicura di manipolare l'oggetto superclasse Mobili come una sottoclasse uno (sedia o un tavolo).
Ho provato con un cast semplice, ma quando chiamo la funzione funziona con l'oggetto mobili, non con il tavolo o la sedia uno.
Quello che ho cercato è qualcosa di simile:
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)
Non so se il problema è che currentFurniture è dichiarato come
Furniture currentFurniture;
E così non sarà riconosciuto come presidente o Tabella nonostante il casting o se il design stesso della soluzione è sbagliato.
il polimorfismo funziona in base al tipo di oggetto ** su cui ** viene chiamato il metodo. Non sul tipo di argomento del metodo. Dovrebbe essere 'furniture.do SometomethingInTheKitchen()'. Aso, post vero codice Java, non pseudo-codice, quando si fa domande sugli errori in Java. –
Solo un complemento di ciò che JBNizet ha dichiarato: Nel tuo esempio, supponi di "usare" il tuo oggetto. In questo modo potresti '(Kitchen Object) .furniture.get(). Use();' In questo modo, puoi codificare le classi superiori e inferiori, senza preoccuparti se il codice esiste. – Bonatti