Üstözellikler (Supertraits)

Bir özellik (trait), onu gerçekleştiren türlerin üstözellikler (supertraits) olarak adlandırılan diğer özellikleri de gerçekleştirmesini gerektirebilir. Burada, Pet’i gerçekleştiren herhangi bir tür Animal’ı da gerçekleştirmelidir.

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!("{}, {} bacağa sahip", puppy.name(), puppy.leg_count());
}

Bu bazen “özellik kalıtımı (trait inheritance)” olarak adlandırılır ancak öğrencilerin bunun nesne yönelimli kalıtım (OO inheritance) gibi davranmasını beklememesi gerekir. Bu sadece bir özelliğin gerçekleştirmeleri üzerinde ek bir gereksinimi (requirement) belirtir.