スーパートレイト / トレイトの依存関係

トレイトは新しいトレイトによって拡張できます。

// 著作権 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0

pub trait Animal {
    /* すべての動物に共通のメソッド */
}

pub trait Mammal: Animal {
    /* 哺乳類専用のメソッド */
}

// stdlib より

pub trait Ord: Eq + PartialOrd {
    /* Ord 用のメソッド */
}
  • トレイトを作成するときは、型があわせて実装しなければならないトレイトを指定できます。これらは スーパートレイト と呼ばれます。

    上の例では、Mammal を実装する型はすべて Animal も実装しなければなりません。

  • このようなトレイトの階層により、複雑な現実世界の分類体系(動物相、マシンハードウェア、オペレーティングシステム固有の事項など)の振る舞いを中心にシステムを設計できます。

  • これはオブジェクト継承とは別物です! ただし、見た目は似ています。

    • オブジェクト継承ではオーバーライドが可能で、継承した型の振る舞いがデフォルトで取り込まれます。

    • トレイトがスーパートレイトを持っていても、そのトレイトがメソッド実装をデフォルト実装としてオーバーライドできることを意味するわけではありません。

参考:

  • https://doc.rust-lang.org/reference/items/traits.html?highlight=supertrait#r-items.traits.supertraits