Супертрейты / зависимости трейтов
Трейты можно расширять новыми трейтами.
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
pub trait Animal {
/* методы, общие для всех животных */
}
pub trait Mammal: Animal {
/* методы только для млекопитающих */
}
// Из стандартной библиотеки
pub trait Ord: Eq + PartialOrd {
/* методы для Ord */
}
-
Определяя трейт, можно указать, какие трейты тип тоже обязан реализовать. Такие трейты называются супертрейтами.
В примере выше любой тип, реализующий
Mammal, также обязан реализоватьAnimal. -
Такие иерархии трейтов позволяют проектировать системы вокруг поведения сложных реальных таксономий (например, фауны, аппаратного обеспечения, особенностей операционных систем и т. д.).
-
Это отличается от наследования объектов! Но выглядит похоже.
-
Наследование объектов позволяет переопределять методы и по умолчанию перенимает поведение унаследованных типов.
-
То, что у трейта есть супертрейт, не означает, что этот трейт может переопределять реализации методов как реализации по умолчанию.
-
Справка:
- https://doc.rust-lang.org/reference/items/traits.html?highlight=supertrait#r-items.traits.supertraits