J'ai édité:
J'ai un doute... Si tu as un typehinting quelque part genre setAdresseJoueur(Adresse $adresse), alors tu peux lui passer une Rue...
val adresse_de_jean = Adresse(Numero(2), Rue("Jean André"), Ville("Bouzy Foissons"))
val adresse_de_bob = Adresse(Numero(2), Rue("Jean Adré Bouzy"), Ville("Foissons"))
Citation :Rue pourrait être une classe enfant d'Adresse, et sa méthode isEqual() passerait en protected. Ainsi, seule Adresse peut appeler cette méthode. Ca créé quand même du couplage mais nécessaire (comme dans l'exemple actuel).
J'ai un doute... Si tu as un typehinting quelque part genre setAdresseJoueur(Adresse $adresse), alors tu peux lui passer une Rue...