10
votes

Utilisation de méthodes de Superclass "Protégée finale" pour conserver le code commun pour les sous-classes

En tant que programmeur Java (Pedantic) Java, j'aimerais savoir, est-ce une bonne pratique de déplacer un bloc de code commun que toutes les sous-classes utilisent à un séparé ( finale < / Strong>) Méthode de classe des parents? Tâches telles que remplissage des listes avec des valeurs communes ou des algorithmes de filtrage communs, etc ... Est-il bon d'utiliser également des méthodes statiques statiques protégées xxx


0 commentaires

4 Réponses :


4
votes

Cela me semble raisonnable - bien que vous souhaitiez que a abstrait. Envisagez également d'utiliser la composition à la place - pourrait B et C contenir un A au lieu de la sous-classement?


2 commentaires

Composition sur l'héritage! Bien plus facile à tester, +1


On dirait que cela peut fonctionner assez bien dans mon cas. Je vais essayer ça!



0
votes

Je proposerais de déplacer toutes ces méthodes pour séparer les classes statiques si elles ne dépendent pas de champs de classe. Faites-les utiliser des méthodes.


0 commentaires

2
votes

Tout d'abord, vous ne devriez pas utiliser s'étend à cet effet car trop d'extension est toujours une mauvaise idée.

Deuxièmement, vous avez complètement raison de ne pas répéter votre code, mais le regrouper par une partie répétée du code n'est pas bon choix. Un moyen préférable de regrouper les choses comme un sens dans le monde réel, par niveau d'abstraction.

Enfin, lorsque vous avez des doutes: séparément ou non, étendue ou composition, protégée finale ou uniquement protégée, essayez d'écrire un test de l'unité à cette classe et les réponses seront très rapides.


0 commentaires

25
votes

Si vous êtes un débutant Java, vous pensez à ces sortes de choses, alors c'est un bon moment pour lire le chapitre "Classes and Interfaces" dans un livre intitulé "Java efficace". Les informations qu'il y aura plus complète et plus nuancée que les réponses que vous obtenez ici.

Voici une façon de penser à mélanger le final , protégé et statique Mots-clés:

  • OO Les puristes vous conseilleront d'éviter statique car il casse le paradigme OO.
  • Bien sûr, en utilisant le mot-clé final (code> empêche également les sous-classes de remplacer également une méthode. À cet égard, le résultat est le même que avec statique .
  • final doit être utilisé plus souvent, et c'est une bonne idée de l'utiliser avec protégé . Voir l'article 17 dans "Java efficace".
  • protégé et statique ne sont pas utilisés ensemble ensemble. Vous seriez à mélanger une construction OO avec une construction qui enfreint le comportement OO normal, la combinaison est donc impair.

3 commentaires

Statique n'est pas si mauvais ... Bloch recommande son utilisation pour faire des usines, par exemple. Et bien sûr, nous ne voulons pas vouloir que math.floor () nécessite une instance de mathématiques! Cela peut être utile, mais utilisé avec précaution, bien sûr.


Je suis d'accord, mais un puriste a déjà essayé de me convaincre du contraire: que les méthodes maths ne doivent pas être statiques!


Les statistiques sont toujours potentiellement dangereuses avec des tests ou une multithreading. Bien sûr, il existe de nombreuses raisons valables d'utiliser des statistiques.