# 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 const method sameIdentity(const Object other) -> bool ``` Cette méthode intrinsèque non overridable, portée par `Object`, teste l’identité de référence : deux accès sont identiques s’ils désignent exactement le même objet. `sameIdentity()` n’est pas équivalent à `==`, qui exprime l’égalité logique lorsqu’elle est disponible. 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. ---