6 votes

Est-il possible d'ajouter le mot clé "final" à une méthode héritée/supprimée ?

Dans Android, je crée une classe abstraite qui étend View (une classe Android à laquelle je n'ai pas accès). La classe abstraite surcharge les vues

@Override
protected final void onDraw(Canvas canvas) {
    if(conditions) return;        

    // child classes should only draw if this class gives the ok
    subDraw(canvas);
}

protected abstract void subDraw(Canvas canvas);

mais j'ai ajouté le dernier mot-clé ici.

En fait, je crée une méthode abstraite que les sous-classes sont censées utiliser à la place de onDraw. J'empêche donc le onDraw d'être surchargé davantage et cela fonctionne.

Je sais qu'il existe des conceptions pour améliorer ce système, mais celui-ci fonctionne comme un charme sans beaucoup de changements. Ma question est plus générale : ce qui précède a-t-il des effets secondaires indésirables au moment de l'exécution ou d'autres problèmes ?

2voto

Boris Schegolev Points 3186

Oui, techniquement, c'est une solution propre. Si vous êtes absolument sûr qu'il n'y a aucune situation dans laquelle quelqu'un pourrait vouloir modifier la logique de cette méthode particulière, vous pouvez le faire.

Il faut également se rappeler que cette méthode doit contenir le moins de logique possible, car elle ne peut être modifiée par aucun descendant. Si vous pensez que la taille de cette méthode va augmenter (sans utiliser de délégués), évitez de la finaliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X