Ruby 中的子类化、继承与对象创建初始化
1. 子类化注意事项
在对非自己编写的类进行子类化时要格外小心。类通常会使用私有方法作为内部辅助方法,这些方法不属于类的公共 API,本就不希望暴露出来。如果你没有阅读过该类的源代码,甚至都不会知道它为自身使用而定义的私有方法的名称。
若在子类中定义了一个(无论其可见性如何)与超类中的私有方法同名的方法,就会在不经意间覆盖超类的内部实用方法,这几乎肯定会导致意外的行为。
所以,在 Ruby 中,只有当你熟悉超类的实现时才应该进行子类化。如果你只想依赖类的公共 API 而不是其实现,那么应该通过封装和委托来扩展类的功能,而不是通过继承。
2. 通过链式调用增强行为
有时在重写方法时,我们并不想完全替换它,只是想通过添加一些新代码来增强其行为。为此,需要一种从重写方法中调用被重写方法的方式,这就是链式调用,通过 super 关键字来实现。
super 就像一个特殊的方法调用:它会在当前类的超类中调用与当前方法同名的方法。(注意,超类本身不一定定义了该方法,它可以从其某个祖先类继承该方法。)你可以像调用普通方法一样为 super 指定参数。方法链式调用的一个常见且重要的场景是类的 initialize 方法。
以下是 Point3D 类的 initialize 方法示例:
class Point3D <
超级会员免费看
订阅专栏 解锁全文
8

被折叠的 条评论
为什么被折叠?



