79 lines
1.8 KiB
Markdown
79 lines
1.8 KiB
Markdown
# 8. Classes et `Object`
|
||
|
||
## 8.1 Héritage de base — V1 REQUIS — FIGÉ
|
||
|
||
Toutes les classes héritent implicitement de `Object`, sauf `Object` lui-même.
|
||
|
||
Les primitives, structs, enums, tuples et unions n'héritent pas artificiellement de `Object`.
|
||
|
||
## 8.2 Héritage de classes — V1 REQUIS — FIGÉ
|
||
|
||
Héritage de classe unique uniquement.
|
||
|
||
Une classe concrète doit être explicitement :
|
||
|
||
```text
|
||
open
|
||
ou
|
||
final
|
||
```
|
||
|
||
Une classe abstraite est :
|
||
|
||
```text
|
||
abstract
|
||
```
|
||
|
||
`abstract`, `open` et `final` sont mutuellement exclusifs au niveau classe.
|
||
|
||
## 8.3 Receivers — V1 REQUIS — FIGÉ
|
||
|
||
```text
|
||
this instance courante
|
||
super instance de la classe parente immédiate
|
||
cls classe courante dans une clsmethod
|
||
parent classe parente immédiate dans une clsmethod
|
||
```
|
||
|
||
Pas de :
|
||
|
||
```text
|
||
super::super
|
||
parent::parent
|
||
```
|
||
|
||
## 8.4 Accès membre — V1 REQUIS — FIGÉ
|
||
|
||
Les membres sont accédés explicitement avec `::` :
|
||
|
||
```text
|
||
this::field
|
||
token::kind()
|
||
Type::member
|
||
super::method()
|
||
```
|
||
|
||
`.` qualifie les namespaces/modules/types ; `::` accède à un symbole contenu.
|
||
|
||
Ils relèvent de la grammaire et ne sont pas surchargeables.
|
||
|
||
## 8.5 Identité d'instance — V1 REQUIS — FIGÉ
|
||
|
||
`Object` fournit une opération intrinsèque non overridable :
|
||
|
||
```text
|
||
const method sameIdentity(const Object other) -> bool
|
||
```
|
||
|
||
Cette méthode intrinsèque non overridable, portée par `Object`, teste l’identité de référence : deux accès sont identiques s’ils désignent exactement le même objet.
|
||
|
||
`sameIdentity()` n’est pas équivalent à `==`, qui exprime l’égalité logique lorsqu’elle est disponible.
|
||
|
||
Exemple : deux objets différents peuvent être logiquement égaux mais ne pas être la même instance.
|
||
|
||
`Object` n'implémente pas automatiquement `OpEqual` ni `OpPartialEqual`.
|
||
|
||
Les classes ne reçoivent donc aucune égalité de valeur automatique.
|
||
|
||
---
|