【发布时间】:2014-10-18 01:17:14
【问题描述】:
这个话题之前已经讨论过,但没有得到满意的回答(在我看来)。 考虑以下 scala 代码:
class A(a:Int) { val _a=a }
class A1(val a:Int) { val _a=a }
class B(a:Int) extends A(a) // OK
class C(val a:Int) extends A(a) // OK
class B1(a:Int) extends A1(a) // OK
class C1(val a:Int) extends A1(a) // fails
class D1(override val a:Int) extends A1(a) // OK
我相信将类参数声明为 val 只会对构造函数调用产生影响: 复制参数而不是传递引用。但是,在每种情况下,类字段都被分配为 val。这是正确的吗?
现在我不明白为什么我们需要在最后一行使用 override 关键字。 请注意,我们没有将类声明为案例类,因此不会自动分配字段。
终于有一个很好的理由为什么人们甚至想要用 val 定义一个像 A1 这样的类 类参数?
提前感谢所有回复。
【问题讨论】:
标签: class scala parameters overriding