gpt4 book ai didi

scala - 如何在 Scala 中更改继承方法的访问级别

转载 作者:行者123 更新时间:2023-12-04 22:34:25 25 4
gpt4 key购买 nike

我正在扩展一个无法直接修改的现有库(我们称之为 Lib)。

有什么方法可以从 Lib 制作一些方法吗?私有(private)以便它们不能在子类之外访问?

例如,如果我有:

class A extends Lib {
def fun(i: int) = someLibFunction(i) //someLibFunction is inherited from Lib
}

如何制作 someLibFunction在 A 中是私有(private)的,尽管它在 Lib 中是公共(public)/ protected ?

最佳答案

这将打破面向对象编程的基本基础——您可以在任何需要父类(super class)的地方使用子类(多态性)。

如果允许缩小方法的可见性(例如,从 publicprivate )客户端代码接收 Lib 的实例不允许接收A extends Lib .客户端代码需要 someLibFunction()可访问且子类不能更改该契约(Contract)。

话虽如此,Scala 和任何面向对象的语言都不允许在子类化时缩小任何方法的可见性。请注意,扩大可见性(例如,从 protectedpublic 是完全可能的)。

换句话说,你不是 延长 现有的 API(库)。您正在创建具有不同契约(Contract)的完全不同的 API(库)。

最后一个例子:你有一个 Vehicle具有 capacity() 的类可以drive() . Car可以扩展Vehicle通过添加一些新功能,如 refuel() .但是Container无法扩展 Vehicle并隐藏驾驶能力。 Container可以包含 Vehicle (反之亦然),还有 ContainerVehicle可能有共同的 parent ,如 CanHoldCargo .

关于scala - 如何在 Scala 中更改继承方法的访问级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10939807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com