密封

2005年8月12日

密封方法或类可防止子类覆盖它。

C# 中,使用关键字 sealed,在 Java 中,使用关键字 final。像 C# 和 C++ 这样的语言默认情况下将方法视为密封的(您可以使用 virtual 关键字取消密封),而其他语言(例如 Java)默认情况下将方法保留为未密封的。

关于密封是否是一个好主意,存在很多争议。那些持指导性态度的人喜欢非常谨慎地对待哪些类和特性可以被覆盖,并将扩展者限制为只覆盖他们认为安全的内容。那些持赋能性态度的人认为,他们无法预测扩展者可能需要做什么,因此不应该剥夺他们的灵活性——扩展者可以覆盖他们喜欢的任何内容,但他们必须承担谨慎行事的责任。和大多数事情一样,我倾向于做一个赋能者。