Est-ce une bonne pratique de laisser les classes abstraites définir des variables d'instance?
public abstract class ExternalScript extends Script {
String source;
public abstract void setSource(String file);
public abstract String getSource();
}
La sous-classe, ExternalJavaScript.class, obtiendrait alors automatiquement la variable source, mais je pense qu'il est plus facile de lire le code si toutes les sous-classes elles-mêmes définissent la source, au lieu de l'héritage.
Quel est ton consseille?
/Adam
J'aurais pensé que quelque chose comme ça serait beaucoup mieux, puisque vous ajoutez une variable, alors pourquoi ne pas restreindre l'accès et la rendre plus propre? Votre getter/setters devrait faire ce qu'ils disent sur l'étain.
public abstract class ExternalScript extends Script {
private String source;
public void setSource(String file) {
source = file;
}
public String getSource() {
return source;
}
}
Pour en revenir à la question, avez-vous déjà pris la peine de regarder où se trouve le code getter/setter lorsque vous le lisez? S'ils sont tous récupérés et configurés, vous n'avez pas à vous soucier de ce que la fonction "fait" lors de la lecture du code. Il y a quelques autres raisons de penser aussi:
Pensez toujours si votre classe est vraiment différente ou non, et cela devrait vous aider à décider si vous avez besoin de plus.
Bien sûr, pourquoi pas?
Les classes de base abstraites ne sont qu'une commodité pour héberger le comportement et les données communes à 2 classes ou plus en un seul endroit pour l'efficacité du stockage et de la maintenance. C'est un détail d'implémentation.
Veillez toutefois à ne pas utiliser une classe de base abstraite alors que vous devriez utiliser une interface. Voir Interface vs classe de base
Bien sûr. L'idée générale des classes abstraites est qu'elles peuvent contenir des comportements ou des données que toutes les sous-classes doivent contenir. Pensez à l'exemple simple de WheeledVehicle - il devrait avoir une variable membre numWheels. Vous voulez que toutes les sous-classes aient cette variable. N'oubliez pas que les classes abstraites sont une fonctionnalité très utile lors du développement d'API, car elles peuvent garantir que les personnes qui étendent votre API ne la casseront pas.