1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//对任何实现特定trait类型有条件的实现trait
trait GetName {
fn get_name(&self) -> &String;
}
trait PrintName {
fn print_name(&self);
}
//对泛型T实现了PrintName特征,前提是T实现了GetName
//有点类似继承
impl<T:GetName> PrintName for T {
fn print_name(&self) {
println!("name = {}",self.get_name());
}
}

struct Student {
name: String,
}
impl GetName for Student {
fn get_name(&self) -> &String {
&(self.name)
}
}

fn main() {
let s = Student {
name: String::from("xiaohuang")
};
s.print_name();
}