En résumé, j'aimerais pouvoir regrouper des instances de classe par une superclasse qui n'implémente pas une certaine interface. Mais à partir de l'ensemble des instances que je voudrais appeler des méthodes de l'interface sur les instances qui implémentent cette interface.Bascule l'objet vers l'interface
Un exemple de code qui pourrait l'expliquer.
class Building{
String c = "white";
Building(){
}
void printColor(){
println("The building is " + c);
}
void paint(String c){
this.c = c;
}
void printBuildQuality(){
println("The build quality is average");
}
}
class SturdyFactoryBuilding extends Building implements Factory{
SturdyFactoryBuilding(){
super();
}
void printBuildQuality(){
println("The build quality is sturdy");
}
void printFactoryOutput(){
println("This factory makes stuff");
}
}
class ShakyFactoryBuilding extends Building implements Factory{
ShakyFactoryBuilding(){
super();
}
void printBuildQuality(){
println("The build quality is shaky");
}
void printFactoryOutput(){
println("This factory makes slightly different stuff");
}
}
public interface Factory{
public void printFactoryOutput();
}
Building building = new SturdyFactoryBuilding();
building.printBuildQuality();
building.printColor();
building.paint("bright red");
building.printColor();
building.printFactoryOutput();
Est-il possible que je peux y arriver, peut-être en ayant un drapeau « isFactory » dans la superclasse.
Merci.
Vous pouvez le réaliser avec une simple vérification 'if (build instanceof Factory)'. Cependant, ce que vous essayez de faire ne serait pas considéré comme un bon design. – Kayaman
Je vois @Kayaman, comme ceci: 'if (build instanceof Factory) { SturdyFactoryBuilding sfb = (SturdyFactoryBuilding) bâtiment; sfb.printFactoryOutput(); } 'Je peux voir comment ce ne serait pas une bonne conception, car j'ai encore besoin de tomber dans une sous-classe spécifique. Y a-t-il une meilleure façon de s'y prendre? – Bluefarmer
Vous pouvez ajouter 'printFactoryOutput' à' Building' en lui donnant une implémentation par défaut NOOP. Les usines remplacent cette valeur par défaut. Genre d'une approche d'adaptateur. – Fildor