目录结构
mod.rs 抽象类
建议把抽象的类放在 mod.rs文件下,个人觉得这样用比较爽。
当然也可以按自己的喜好,放其他地方。
注意抽象写法上的不同,一个是; 一个是{}
pub mod yileina;
pub mod saya;
pub trait Abstract {
//名字
fn name()->String; //这种写法,实现的类,必须对该方法进行实现
//价格
//这种写法,实现的类,可以不进行实现。 如果进行实现,就是进行了方法重写。
// (本质上是函数方法,看起来像接口而已)
fn price()->String{
println!("$500");
"$500".to_string()
}
//尺寸
fn size()->String{
println!("666");
"666".to_string()
}
}
yileina.rs 具体实现类
对抽象的具体实现
必须实现 ; 结尾 (name) 的方法,可以选择实现{} 的方法
use crate::bridge::Abstract;
pub struct Yileina {}
impl Abstract for Yileina {
fn name() -> String {
let mut str = "伊蕾娜!".to_string();
println!("{}",str);
str
}
fn price()->String{ //相当于重写
let mut str = "$110".to_string();
println!("{}",str);
str
}
}
saya.rs 具体实现类
对抽象的具体实现
use crate::bridge::Abstract;
pub struct Saya {}
impl Abstract for Saya {
fn name() -> String {
let mut str = "沙耶!".to_string();
println!("{}",str);
str
}
fn price()->String{ //相当于重写
let mut str = "$120!".to_string();
println!("{}",str);
str
}
fn size()->String{ //相当于重写
let mut str = "158".to_string();
println!("{}",str);
str
}
}
main.rs 主函数
调用没有实现的方法,会得到默认的返回值。
调用已经实现的方法,会返回重新实现的返回值。(相当于进行了代码重写)
mod bridge;
use crate::bridge::yileina::Yileina;
use crate::bridge::Abstract;
use crate::bridge::saya::Saya;
fn main() {
Yileina::name();
Yileina::price();
Yileina::size();
Saya::name();
Saya::price();
Saya::size();
}
运行结果
伊蕾娜!
$110
666
沙耶!
$120!
158