3.2.2 父 Trait

02-父 Trait — Comprehensive Rust

译文 · 基于 Comprehensive Rust

原文链接: https://google.github.io/comprehensive-rust/methods-and-traits/traits/supertraits.html

3.2.2 父 Trait

Trait 可以要求实现它的类型也实现其他 trait,称为_父 trait_(supertraits)。这里,任何实现 Pet 的类型都必须实现 Animal。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Copyright 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0
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 继承」,但学员不应期望它像面向对象继承那样工作。它只是为 trait 的实现增加了额外要求。

最后修改 August 11, 2026: 更新 (70a5af133)