我的RUST学习—— 【第十七章 17-1】面向对象语言的特征

对象包含数据和行为

一本十分经典的编程书籍这么定义面向对象:

  • 面向对象的程序是由对象组成的。一个对象包含数据和操作这些数据的过程。

按照这个定义,Rust是面向对象的:结构体枚举包含数据,而 impl 实现了在其上的方法。虽然带有方法的结构体和枚举并不称为对象,但这与对象的功能是相似的。

封装——隐藏了实现细节

与其他面向对象语言一样,Rust 有封装的思想在里面。

只能通过对象上的公有方法来改变对象的数据。也可以用 pub 来改变数据的封装级别。

继承——作为类型系统与代码共享

继承——一个对象可以获得父对象的数据和方法,无需重新定义。

如果按照这个标准,Rust 并不是面向对象的。

但是 Rust 也提供了其他解决方案。

为什么使用继承?

  • 重用代码:继承可以重用父类的成员和方法。而Rust其实也可以,第十章中,Trait的默认实现方法,只要任何实现了相同Trait的类型,都可以使用默认方法,也可以覆盖默认方法。
  • 多态:子类型可以用于父类型可以使用的地方。Rust通过泛型对不同的类型进行抽象,并通过 trait bounds对类型添加约束。

不过最近,越来越多的人不再推荐继承,提出“组合大于继承”的说法。某些语言还只允许子类继承一个父类,进一步限制了继承的使用。

因为这些原因,Rust 选择使用 Trait 对象 而不是继承。接下来让我们看看,Rust中如何使用泛型Trait对象实现多态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值