是否有任何OO语言允许从类中减去功能?

Dar*_*enW 3 oop programming-languages

在C++和大多数面向对象的语言中,我知道,当您从现有的A类派生类B时,您可以添加新方法,覆盖现有方法以及添加新数据成员.如果A在B中有一些你不想要的碎片,你就无法消除它们.也许大多数时候无论如何都没有意义,但有时我希望能.

是否有任何语言允许定义派生类,并删除其父元素的某些元素?

hvg*_*des 5

我想也许正确的方法,子类应该提供一个覆盖父实现的空方法.

问题是子类与其超类之间存在IS-A关系.如果子类关闭了方法,那么在语义上它是否是超类的一个实例?多态性如何工作?当您将子类传递给期望超类类型的方法时,您会遇到各种各样的痛苦,您应该能够做到这一点.

也就是说,使用动态语言,您可以通过元编程在运行时删除所需的方法.但我只会做一个空方法,如果有意义,可能会抛出某种UnsupportedOperation错误.

  • override-and-throw模式广泛用于.NET框架类库中.例如,`ReadOnlyCollection <T>`将为所有由`IList <T>`接口契约指定的变异方法抛出`NotSupportedException`.实际上没有其他任何事情可以合理地完成. (2认同)