Супертрейти
Трейт може вимагати, щоб типи, які його реалізують, також реалізовували інші трейти, так звані супертрейти. У цьому випадку, будь-який тип, що реалізує 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. Це просто вказує додаткову вимогу до реалізації трейту.