This commit is contained in:
2026-09-12 08:56:27 +02:00
parent 426aa92d0d
commit 18306bdc8c
116 changed files with 11080 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
# 16. Dispatch, override et modificateurs
## 16.1 Ordre canonique — V1 REQUIS — FIGÉ
Ordre des modificateurs :
```text
visibility
-> safety
-> linkage / ABI
-> type / dispatch modifiers
-> override
-> declaration kind
```
Puis :
```text
Name<...>
-> extends ...
-> implements ...
```
`extends` et `implements` sont des clauses après le nom, pas des modificateurs.
Exemples :
```text
public final class User
public open class Service
public abstract class Base
public unsafe extern "C" union NativeValue
protected open method calculate(...)
protected override method calculate(...)
protected final override method calculate(...)
```
Les ordres alternatifs sont des erreurs syntaxiques même s'ils seraient théoriquement compréhensibles.
## 16.2 Méthodes overridables — V1 REQUIS — FIGÉ
Une méthode nouvellement déclarée n'est pas overridable par défaut.
Elle doit être explicitement :
```text
open method
```
ou :
```text
abstract method
```
Un descendant utilise :
```text
override method
```
Pour fermer ensuite la chaîne :
```text
final override method
```
`final method` sur une nouvelle méthode n'apporte rien et n'est pas nécessaire : l'absence de `open` suffit.
Même modèle pour `clsmethod` si elle participe au dispatch de classe.
## 16.3 Visibilité d'override — V1 REQUIS — FIGÉ
Un override conserve exactement la visibilité du contrat hérité.
Pas d'élargissement ni de réduction implicite.
Une exposition plus large nécessite un wrapper explicite.
## 16.4 `protected` — V1 REQUIS — FIGÉ EN PRINCIPE
`protected` existe uniquement dans le modèle d'héritage de classe et signifie « accessible depuis les classes dérivées » en plus de la classe déclaratrice.
Les détails d'accès via une autre instance d'une classe dérivée doivent être figés dans les règles finales de résolution membre.
---