79 lines
1.7 KiB
Markdown
79 lines
1.7 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
|
|
Object::sameInstance(Object other) -> bool
|
|
```
|
|
|
|
Elle teste l'identité d'instance, c'est-à-dire si deux références désignent exactement le même objet.
|
|
|
|
Elle n'est pas équivalente à `==`.
|
|
|
|
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.
|
|
|
|
---
|