首页 > 解决方案 > 如何实现分层特征?

问题描述

我在层次结构中有两个特征:AnimalBird. 我怎样才能创建一个Chicken实现Bird

trait Animal {
    fn noise(&self) -> String;
    fn print_noise(&self) {
        print!("{}", self.noise());
    }
}

trait Bird: Animal {
    fn noise(&self) -> String {
        "chirp"
    }
}

struct Chicken {}

impl Bird for Chicken {}

操场

当我尝试编译时,我得到:

error[E0277]: the trait bound `Chicken: Animal` is not satisfied
  --> src/lib.rs:16:6
   |
16 | impl Bird for Chicken {}
   |      ^^^^ the trait `Animal` is not implemented for `Chicken`

我不想在Animal之前实现Bird,因为我ChickennoiseBird.

标签: rust

解决方案


简单的答案:你不能。Rust 没有设计继承。Rust 没有与 Java 或 C++ 相同的面向对象模型。

如果你真的想做这样的事情,你可以用这段代码实现一个特征

trait Animal {
    fn noise(&self) -> String;
    fn print_noise(&self) {
        print!("{}", self.noise());
    }
}

trait Bird:Animal {}

impl<T: Bird> Animal for T {
    fn noise(&self) -> String {
        "chirp".to_string()
    }
}


struct Chicken {}

impl Bird for Chicken {}

fn main() {
    let chicken = Chicken{};
    chicken.print_noise();
}

和其他人一样,我建议阅读The Rust Programming Language一书,特别是OOPTraits 和 Generics部分。在线阅读时是免费的。


推荐阅读