traitGreet{// 方法签名(无默认实现,必须由实现者提供)
fnsay_hello(&self);// 继承接口
// 带有默认实现的方法
fnsay_bye(&self){// 继承接口与实现
println!("Goodbye!");}}structPerson{name: String,}implGreetforPerson{fnsay_hello(&self){println!("Hello, my name is {}!",self.name);}fnsay_bye(&self){println!("{} says: See you later!",self.name);}}structRobot;implGreetforRobot{fnsay_hello(&self){println!("Beep boop, I'm a robot.");}// 不覆盖 `say_bye`,直接使用默认实现
}fnmain(){letperson=Person{name: String::from("Alice"),};person.say_hello();// 输出: Hello, my name is Alice!
person.say_bye();// 输出: Alice says: See you later!
letrobot=Robot;robot.say_hello();// 输出: Beep boop, I'm a robot.
robot.say_bye();// 输出: Goodbye!(默认实现)
}
traitGreet{fnsay_hello(&self);fnsay_bye(&self){println!("Goodbye!");}}structPerson{name: String,}implGreetforPerson{fnsay_hello(&self){println!("Hello, my name is {}!",self.name);}fnsay_bye(&self){println!("{} says: See you later!",self.name);}}structRobot;implGreetforRobot{fnsay_hello(&self){println!("Beep boop, I'm a robot.");}}fnmain(){letperson=Person{name: String::from("Alice"),};letrobot=Robot;// 动态分发(Trait 对象)
letgreeters: Vec<&dynGreet>=vec![&person,&robot];forgingreeters{g.say_hello();g.say_bye();}}