面试题答案
一键面试// 定义Animal特质
trait Animal {
fn speak(&self);
}
// Dog结构体实现Animal特质
struct Dog;
impl Animal for Dog {
fn speak(&self) {
println!("Woof!");
}
}
// Cat结构体实现Animal特质
struct Cat;
impl Animal for Cat {
fn speak(&self) {
println!("Meow!");
}
}
fn main() {
// 创建特质对象的向量
let animals: Vec<Box<dyn Animal>> = vec![
Box::new(Dog),
Box::new(Cat),
];
// 通过特质对象调用speak方法
for animal in animals {
animal.speak();
}
}
在上述代码中:
- 首先定义了
Animal
特质,包含speak
方法。 - 接着
Dog
和Cat
结构体分别实现了Animal
特质。 - 在
main
函数中,创建了一个Vec<Box<dyn Animal>>
类型的向量,其中Box<dyn Animal>
就是特质对象,它可以存放任何实现了Animal
特质的类型。 - 最后通过遍历这个向量,调用每个特质对象的
speak
方法。