为什么在OOP中有一个类的选项被标记为永远不会从祖先继承?

Ism*_*ael 5 oop inheritance

C#中的"sealed"关键字,Java中的Final.

因为我几乎从不创建任何图表,我只使用已经完成的类(来自框架)我仍然多年后不知道为什么有人"锁定"一个类,所以它永远不会被扩展/继承.

它是有益的?有没有什么危害使得所有类都可以从继承中扩展掉掉"密封它"的可能性?

很抱歉在2012年问OOP是微不足道的,但我希望收到一个很好的解释和/或一个很好的阅读来源!因为对我来说没用,我无法相信它只是一个简单的概念.

但在任何地方,我搜索的答案都是一样的:"标记一个类,防止它从其他人那里继承."

Tom*_*icz 6

  1. 安全性 - 继承类可能有权访问基类的内部部分,从而破坏了封装

  2. 保留契约 - 继承类可能会破坏基类提供的契约.见Liskov替代原则

  3. 不可变性 - 继承类的特殊情况可以将可变字段引入不可变类

  4. 性能 - 虚拟机可以积极地优化这些类,例如假设方法永远不会被覆盖,从而避免虚拟调用

  5. 简单 - 实现类似的equals()方法更简单,而不必担心继承