En Java, la conversion de type forcée est divisée en deux types : le type de données de base et le type de données de référence. Ce dernier dont nous discutons ici est la conversion de type forcée du type de données de référence.
En Java, en raison de l'héritage et de la transformation ascendante, les sous-classes peuvent être converties très naturellement en classes parentes, mais la conversion des classes parentes en sous-classes nécessite une conversion forcée. Étant donné que la sous-classe a plus d'attributs et de fonctions plus puissantes que la classe parent, la conversion de la classe parent en sous-classe nécessite de la force. Alors, cela réussira-t-il tant que la classe parent est convertie en sous-classe ? En fait, ce n'est pas le cas. La conversion de type forcée entre eux est conditionnelle.
Lorsque nous construisons un objet à l'aide d'un constructeur de type, le type de l'objet est déjà déterminé, ce qui signifie que son essence ne changera plus. En Java, nous pouvons utiliser le type de classe parent pour le référencer par héritage et transformation ascendante. À l'heure actuelle, nous utilisons un type plus faible pour référencer un objet plus fort, ce qui est faisable. Mais lorsque l’on contraint un type plus faible à un objet plus fort, cela peut ne pas fonctionner.
Donnez un exemple pour illustrer. Par exemple, il y a deux objets, Père et Fils, dans le système. Tout d'abord, nous construisons un objet Son, puis nous le référençons avec une variable de type Father :
Father father = new Son();
Ici, l'instance de l'objet Son est convertie en père, mais veuillez faire attention à la nature de cette instance de l'objet Son en mémoire. C'est toujours un type Fils, mais sa capacité a été temporairement affaiblie. Et si nous voulons devenir plus forts ? Restaurez son type d'objet !
Son son = (Son)father;
Cette affirmation est réalisable. En fait, la référence père est toujours de type Père, mais ses capacités sont renforcées, elle est transférée à la référence fils, l'objet Fils. . L'instance est référencée par la variable fils, restaure sa vraie forme et peut utiliser toutes les fonctions.
Comme mentionné précédemment, forcer une classe parent à une sous-classe ne réussit pas toujours, alors dans quelles circonstances cela échoue-t-il ?
Lorsque la véritable identité du type de référence est le type de la classe parent elle-même, la conversion de type forcée provoquera une erreur. Par exemple :
Father father = new Father(); Son son = (Son) father;
Ce système générera des informations sur l'exception ClassCastException.
Ainsi, le compilateur vérifiera uniquement s'il existe une relation d'héritage entre les types au moment de la compilation, et si c'est le cas, il réussira et au moment de l'exécution, il vérifiera son vrai type, et s'il réussit, il le fera ; lancer une ClassCastException.
Ainsi, en héritage, une sous-classe peut automatiquement se transformer en classe parent, mais lorsque la classe parent est forcée vers une sous-classe, la conversion forcée ne réussira que lorsque la véritable identité du type référence est la sous-classe, sinon cela échouera.
Ce qui précède est le contenu du chapitre sur l'amélioration de Java (10) -----conversion de type forcée Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !