Супертрейти
Трейт може вимагати, щоб типи, які його реалізують, також реалізовували інші трейти, так звані супертрейти. У цьому випадку, будь-який тип, що реалізує Pet, повинен реалізувати 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("Рекс"));
println!("{} має {} ніг", puppy.name(), puppy.leg_count());
}
Іноді це називають “успадкуванням трейтів”, але студенти не повинні очікувати, що це буде схоже на успадкування об’єктів OO. Це просто вказує додаткову вимогу до реалізації трейту.