我正在扩展一个Lib我无法直接修改的现有库(让我们称之为).
有没有办法从Libprivate 创建一些方法,以便它们不能在子类之外访问?
例如,如果我有:
class A extends Lib {
def fun(i: int) = someLibFunction(i) //someLibFunction is inherited from Lib
}
Run Code Online (Sandbox Code Playgroud)
someLibFunction尽管在Lib中公开/受到保护,我怎样才能在A中私有化?
Tom*_*icz 11
这将打破面向对象编程的基础 - 你可以在任何预期超类的地方使用子类(多态).
如果它被允许来缩小的方法的可见性(例如,从public到private)客户端接收代码的一个实例,Lib将不会被允许接收A extends Lib.客户端代码期望someLibFunction()可访问,子类不能更改该合同.
据说,在进行子类化时,Scala和任何面向对象的语言都不允许缩小任何方法的可见性.需要注意的是扩大知名度(例如从protected到public是完全可能的).
换句话说,您没有扩展现有的API(库).您正在创建具有不同合同的完全不同的API(库).
最后一个例子:你有一个Vehicle有a capacity()和can的类drive().Car可以Vehicle通过添加一些新功能来扩展refuel().但Container不能扩展Vehicle和隐藏驾驶能力.Container可以包含 Vehicle(反之亦然),也Container并Vehicle可能有这样共同的父CanHoldCargo.
| 归档时间: |
|
| 查看次数: |
1296 次 |
| 最近记录: |