Rust 我如何实现层次特征?

Rust 我如何实现层次特征?,rust,Rust,我有两个层次特征:动物和鸟。如何创建实现鸟的鸡 trait Animal { fn noise(&self) -> String; fn print_noise(&self) { print!("{}", self.noise()); } } trait Bird: Animal { fn noise(&self) -> String { "chirp" } } struct Chic

我有两个层次特征:
动物
。如何创建实现鸟的

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 {}

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

错误[E0277]:特性绑定的'Chicken:Animal'不满足
-->src/lib.rs:16:6
|
16 |以鸟换鸡{}
|^^^^^特征“动物”不适用于“鸡”`

我不想在
Bird
之前实现
Animal
,因为我想
Chicken
Bird
继承
noise
函数简单回答:你不能。锈不是设计上的遗传。 生锈没有与java或C++相同的面向对象模型。 如果你真的想做这样的事情,你可以用代码来实现一个特性

trait动物{
fn噪声(&self)->字符串;
fn打印噪声(和自身){
打印!(“{}”,self.noise());
}
}
特征鸟:动物{}
动物移植{
fn噪波(&self)->字符串{
“唧唧喳喳”到_string()
}
}
结构鸡{}
为鸡{}买鸟
fn main(){
让鸡=鸡{};
鸡。打印噪音();
}

和其他人一样,我建议大家阅读这本书,特别是其中的章节。在线阅读时是免费的。

Bird
继承noise函数。谁将实施
Animal::noise
?这与
Bird::noise
的方法不同。我相信你的问题已经得到了答案。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。您还应该返回并用Rust编程语言重新阅读。此回答是否表示您同意该问题已由建议的副本回答?@Shepmaster其90%的答案相同。然而,提议的副本更像是“多类”而不是“继承人类”(如果我理解正确的话)
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();
}