Supertraits
Um trait pode exigir que os tipos que o implementam também implementem outros traits, chamados supertraits. Aqui, qualquer tipo que implemente Pet
deve implementar Animal
.
trait Animal { fn leg_count(&self) -> u32; } trait Pet: Animal { fn name(&self) -> String; } struct Dog(String); impl Animal for Dog { fn leg_count(&self) -> u32 { 4 } } impl Pet for Dog { fn name(&self) -> String { self.0.clone() } } fn main() { let puppy = Dog(String::from("Rex")); println!("{} tem {} pernas", puppy.name(), puppy.leg_count()); }
Isso é às vezes chamado de "herança de trait", mas os alunos não devem esperar que isso se comporte como herança de Orientação a Objetos. Ele apenas especifica um requisito adicional nas implementaçÔes de um trait.