Files
saselang-bible/chapters/016-dispatch-override-et-modificateurs.md
2026-09-12 19:31:05 +02:00

105 lines
2.4 KiB
Markdown

# 16. Dispatch, override et modificateurs
## 16.1 Ordre canonique — V1 REQUIS — FIGÉ
Ordre des modificateurs :
```text
visibility
-> safety
-> linkage / ABI
-> type / dispatch modifiers
-> override
-> access qualifier
-> 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 const method inspect(...)
protected override method calculate(...)
protected final override const method inspect(...)
```
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.
## 16.5 Qualification `const` dans les contrats — V1 REQUIS — FIGÉ
La qualification `const` d'une méthode fait partie de son contrat de mutation.
Une implémentation ou un override doit conserver exactement cette qualification en V1.
```text
const method
doit être implémentée/overridée par const method
method
doit être implémentée/overridée par method
```
Saselang n'effectue pas de changement implicite de mutabilité dans une hiérarchie de contrats.
---