Pourquoi utiliser une classe abstraite sans méthodes abstraites?

J’étudie maintenant un java et je suis de la partie de l’abstrait. J’ai lu une sorte de partie étrange pour moi qu’il existe une classe abstraite qui n’inclut aucune méthode abstraite.

Pourquoi utilisent-ils ce genre de classe?

Pour empêcher l’instanciation de cette classe et l’utiliser uniquement comme classe de base. Les classes enfants peuvent utiliser les méthodes générales définies dans la classe abstraite.

Par exemple, il est inutile de créer une instance de AbstractVehicle . Mais tous les véhicules peuvent réutiliser une méthode registerMileage(int) .

Une des raisons les plus courantes est que la classe abstract fournisse des implémentations éclatantes des méthodes abstract pour faciliter la tâche des sous-classes qui ne sont pas obligées de mettre en œuvre toutes les méthodes abstract , mais uniquement celles qu’elles souhaitent. Peu importe si ces chemins d’exécution ne sont pas exercés.

HttpServlet est un exemple de ce modèle en action. Il a des implémentations par défaut pour toutes les méthodes qui traitent les différents types de requêtes, mais elles lancent toutes une exception. La sous-classe doit les remplacer si elle veut faire quelque chose de significatif. Il est bon de ne pas remplacer certaines méthodes du gestionnaire tant qu’elles ne sont jamais appelées.

Oui, nous pouvons avoir une classe abstraite sans aucune méthode abstraite. Le meilleur exemple de classe abstraite sans méthode abstraite est HttpServlet

Si cette classe étend une autre classe abstraite et n’a pas d’implémentation de méthodes abstraites héritées.

Cette classe contient une logique commune pour tous ses héritiers, mais elle ne représente pas une entité utilisable (en termes d’application particulière)

Supposons que vous ayez un ensemble de classes associées, mais pas encore de code associé (partagé). Si nous faisons en sorte que toutes ces classes étendent une classe de base sans méthode abstraite, si nous ne voulons pas que toutes ces classes aient une méthode / caractéristique identique dans le futur, cela peut être fait en une seule fois en la plaçant dans classe de base Le code n’est donc pas répété et il se reflète dans toutes les classes enfants en l’incluant dans un seul endroit.

Ces types de classes sont utilisés pour implémenter une logique générale pouvant être implémentée par d’autres classes. Le rendre abstrait empêche de l’instancier. Mais d’autres classes peuvent hériter de la classe et de ses méthodes.

Je développe une classe abstraite pour empêcher l’instanciation de cette classe et l’utiliser uniquement comme classe de base. parce que ces types de classes sont utilisés pour implémenter une logique générale qui peut être implémentée par d’autres classes. Parfois, j’ai une implémentation par défaut pour chaque méthode de la classe abstraite. De cette manière, cela n’oblige pas la sous-classe à écraser toute la méthode, mais implémente tout le monde selon les besoins. Cela signifie implicitement que vous devez écraser au moins une méthode pour créer une scène à l’aide de cette classe abstraite.

Un autre exemple de cette classe est lorsque vous implémentez des aides à la création. Ces classes sont utilisées pour faciliter la création d’objects par le client, qui sont liés au sujet mais découplés en fonction du besoin. Par nature, les méthodes de cette classe de créateur sont toutes statiques et peuvent également être considérées comme des classes d’utilitaires. Évidemment, l’installation de cette classe est vaine et donc le mot-clé abstract .

Pour citer un exemple récent que j’ai rencontré, org.springframework.integration.dsl.sftp classe org.springframework.integration.dsl.sftp de org.springframework.integration.dsl.sftp qui est un moyen simple d’exiger des objects (par exemple, des adaptateurs, des passerelles) de l’API sftp.

Je ne vois aucune bonne raison de l’utiliser. Il pourrait être utilisé comme “marqueur” mais une interface serait un meilleur choix.

La classe abstraite sans méthode abstraite signifie que vous pouvez créer un object de cette classe abstraite. Voir mon exemple.

 abstract class Example{ void display(){ System.out.println("Hi I am Abstract Class."); } } class ExampleDemo { public static void main(Ssortingng[] args) { Example ob = new Example(){}; ob.display(); } } 

Si vous écrivez une méthode abstraite dans la classe abstraite, elle ne sera pas compilée. Ce qui signifie que si vous créez une classe abstraite sans méthode abstraite, vous pouvez créer un object de cette classe abstraite.