v0.2.12
This commit is contained in:
86
chapters/016-dispatch-override-et-modificateurs.md
Normal file
86
chapters/016-dispatch-override-et-modificateurs.md
Normal 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.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user