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.