Java ne supporte pas cela. Vous pouvez tirer parti du polymorphisme pour traiter une instance de B
comme une instance de A
, mais pas l'inverse.
La raison pour laquelle vous ne pouvez pas le faire est qu'il n'existe aucun moyen sûr de garantir que votre instance de A
est en fait une instance de B
(vous pouvez lancer l'instance mais même si vous l'avez fait, vous vous garantissez uniquement une exception au moment de l'exécution).
La meilleure façon de savoir s'il y a un type de sécurité, les relations entre les types polymorphes est de tester cette déclaration validité:
Toute instance d'un certain type est une instance d'un autre type.
Par exemple:
Toute instance de chien est une instance de mammifères.
Une instance de Mammal est une instance de Dog.
Notez que le premier exemple est vrai alors que le second est faux. Ce que vous essayez de faire dans votre exemple de code est exactement comme essayer de traiter un mammifère comme un chien - même si c'est parfois vrai, ce n'est pas vrai catégoriquement ce qui signifie que le compilateur ne le permettra pas.
Encore une fois, pour les moments où cela pourrait être vrai, vous devez lancer la référence, mais cela vous ouvre des exceptions au moment de l'exécution. Votre exemple spécifique ci-dessus est l'un de ces cas où une exception se produirait car nous pouvons clairement voir que vous avez instancié une instance de type A
.
Vous pouvez essayer un peu de "composition over inheritance" ou bien ajouter une couche supplémentaire d'indirection. –
Ce n'est pas possible. – SLaks