trait A { def a: String } defined trait A scala> trai-6ren">
gpt4 book ai didi

scala - 如果有的话,没有实现的子特征中的 "abstract override"在哪里有用?

转载 作者:行者123 更新时间:2023-12-01 09:23:52 25 4
gpt4 key购买 nike

给出以下两个特征的示例,其中一个扩展另一个特征,每个特征没有实现 def a:

scala> trait A { def a: String }
defined trait A

scala> trait B extends A { abstract override def a: String }
defined trait B

这个结构有用吗?有哪些用例?

最佳答案

我认为答案与您评论中链接的答案基本相同。在 Scala 中,方法的 abstract 关键字不是必需的,因为编译器可以根据它是否具有实现来判断它是否是抽象的。所以这里的用法是多余的。

实现抽象方法的方法也不需要 override 关键字(或者我猜在这种情况下根本不做任何事情)。所以真的,B 等价于:

trait B extends A { def a: String }

或者真的只是(因为 B 将被假定为抽象):

trait B extends A

与链接的答案类似,我可以想象曾经使用 override 可能对可读性有用的场景。如果我使 Ba 的返回类型比 A 更具体,我可以使用 override 作为暗示我正在以某种方式修改行为:

trait A {
def a: Any
}

trait B extends A {
override def a: String
}

在这种情况下,我暗示 B 中的 a 可能与从 A 继承的签名略有不同。当然,这只有在读者知道并以一致的方式使用时才有用。但是没有override 我仍然可以做同样的事情。

关于scala - 如果有的话,没有实现的子特征中的 "abstract override"在哪里有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28797579/

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