スーパートレイト / トレイトの依存関係
トレイトは新しいトレイトによって拡張できます。
// 著作権 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