Supertraits
یک trait میتواند نیاز داشته باشد که تایپهایی که آن را پیادهسازی میکنند، همچنین traits دیگری به نام supertraits را نیز پیادهسازی کنند. در اینجا، هر نوعی که 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("Rex")); println!("{} has {} legs", puppy.name(), puppy.leg_count()); }
این گاهی اوقات "trait inheritance" نامیده میشود، اما دانشآموزان نباید انتظار داشته باشند که این رفتار مشابه وراثت در برنامهنویسی شیءگرا (OO) باشد. این تنها یک الزام اضافی بر روی پیادهسازیهای یک trait را مشخص میکند.