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

2.4 KiB

16. Dispatch, override et modificateurs

16.1 Ordre canonique — V1 REQUIS — FIGÉ

Ordre des modificateurs :

visibility
-> safety
-> linkage / ABI
-> type / dispatch modifiers
-> override
-> access qualifier
-> declaration kind

Puis :

Name<...>
-> extends ...
-> implements ...

extends et implements sont des clauses après le nom, pas des modificateurs.

Exemples :

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 :

open method

ou :

abstract method

Un descendant utilise :

override method

Pour fermer ensuite la chaîne :

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.

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.