封装 | 可以使用结构体struct来封装数据,使用关联函数和方法实现对数据的操作 例如 struct Rectangle { width: u32, height: u32, } impl Rectangle { fn new(width: u32, height: u32)-> Rectangle { Rectangle { width, heoght} } fn area(&self) -> u32 { self.width * self.height } |
继承 | 1.rust不支持继承 但是可以通过其他方式实现继承 2.rust实现继承的方式 1.使用组合实现继承 1.比喻:一个学生有一个书包,则学生类可以继承书包类型的字段 2.代码示例 //1.定义Book结构体 struct Book { title: String, author: String, } //2.Book的方法 impl Book { // Book自己的方法 fn print_details(&self) { println!("Title: {}, Author: {}", self.title, self.author); } } //3.liabrary用book实例 struct Labrary { book:Book } |
//4.实现library的构造函数 impl Library { fn new(book: Book) -> Library { Library {book} } } //5. main函数中使用library和book fn main() { // 创建一个Book实例 let my_book = Book { title: String::from("Rust编程之道"), author: String::from("张三"), }; // 使用Book实例来创建Library实例 let my_library = Library::new(my_book); // 通过Library实例直接调用Book实例的print_details方法 my_library.book.print_details(); } | |
2.使用使用trait实现继承 / / 定义一个 Trait,描述用户的基本行为 trait UserBehavior { fn display_info(&self); } // 实现 UserBehavior Trait impl UserBehavior for User { fn display_info(&self) { println!("Username: {}, Email: {}", self.username, self.email); } } impl UserBehavior for Admin { fn display_info(&self) { println!("Username: {}, Email: {}, Admin Level: {}", self.user.username, self.user.email, self.admin_level); } } // 用户信息结构体 struct User { username: String, email: String, } | |
impl User { pub fn new(username: String, email: String) -> User { User { username, email } } } // 管理员结构体,包含用户信息 struct Admin { user: User, admin_level: u8, } impl Admin { pub fn new(username: String, email: String, admin_level: u8) -> Admin { let user = User::new(username, email); Admin { user, admin_level } } pub fn manage_users(&self) { println!("Managing users..."); } } | |
// 泛型函数,接受实现了 UserBehavior Trait 的引用 fn display_info_for_anyone<T: UserBehavior>(person: &T) { person.display_info(); } fn main() { let user = User::new(String::from("user"), String::from("user@example.com")); let admin = Admin::new(String::from("admin"), String::from("admin@example.com"), 5); display_info_for_anyone(&user); display_info_for_anyone(&admin); } |
rust学习_面向对象
于 2024-09-16 21:17:34 首次发布