Super rasgos

Rust no tiene "herencia", pero puedes definir un rasgo como un superconjunto de otro rasgo. Por ejemplo:

trait Persona {
    fn nombre(&self) -> String;
}

// Persona es un super rasgo de Estudiante.
// La implementación de Estudiante requiere también impl Persona.
trait Estudiante: Persona {
    fn universidad(&self) -> String;
}

trait Programador {
    fn lenguaje_favorito(&self) -> String;
}

// EstudianteCienciasComputacion es un rasgo de Programador y Estudiante.
// La implementación de EstudianteCienciasComputación requiere impl de ambos super
// rasgos.
trait EstudianteCienciasComputacion: Programador + Estudiante {
    fn nombre_de_usuarion_git(&self) -> String;
}

fn saludo_de_estudiante(student: &dyn EstudianteCienciasComputacion) -> String {
    format!(
        "Mi nombre es {} y yo asisto a {}.
Mi lenguage favorito es {}.
Mi nombre de usuario Git es {}",
        student.nombre(),
        student.universidad(),
        student.lenguaje_favorito(),
        student.nombre_de_usuarion_git()
    )
}

fn main() {}

Ve también

El capítulo del Lenguaje de Programación Rust sobre super rasgos