gpt4 book ai didi

inheritance - Scala:如何继承 "static slot"?

转载 作者:行者123 更新时间:2023-12-04 02:43:51 24 4
gpt4 key购买 nike

好吧,我正在学习 Scala,所以这个问题对大多数人来说可能太基础了。

在 Java 中,我可以在类中拥有一个静态插槽(函数或变量),然后我也会在继承的类中拥有该插槽。

在 Scala 中,我没有静态插槽,但我有配套对象。但是我发现这些对象不是继承类的一部分,所以如果我有两个类 PersonStudent , 并且 Person 有一个带有变量 all:List 的伴随对象返回所有人员的列表,以便我可以执行 Person.all ,我期待我能做到Student.all也是,但事实并非如此。

有什么方法可以获得与我在 Java 中相同的行为吗?

谢谢!

最佳答案

从理论上讲,Java 在这方面的行为是非常 splinter 的。从面向对象的角度来看,子类继承静态成员这一事实确实没有任何意义。静态实际上只不过是花哨的、有作用域的全局变量。继承是您在类级别看到的东西,但静态实际上不在类级别(因为它们是全局的),因此不应应用继承。它在 Java 中所做的事实是……令人不安。

Scala 在这方面确实走上了高路;我们都应该感谢的东西。正如另一个答案中提到的,定义“继承”静态的正确方法是将继承的成员提取到特征中:

trait Inherited {
def foo() { ... }
def bar(i: Int) = ...
}

class Person {
...
}

object Person extends Inherited

class Student extends Person {
...
}

object Student extends Inherited

它可能看起来比 Java 更冗长,但相信我,当我说语义因此不那么令人惊讶时。

关于inheritance - Scala:如何继承 "static slot"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586764/

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