考慮以下代碼:抽象類中的次構造函數的用例是什麼?
abstract class Foo(val s: String) {
def this(i: Int) = this("" + (i+2))
}
據我瞭解構造函數不能被繼承和次級構造不能從子類與super
叫象Java。
它們只是一個無用的工件,或者是否存在這種構造的一些明智的用例?
考慮以下代碼:抽象類中的次構造函數的用例是什麼?
abstract class Foo(val s: String) {
def this(i: Int) = this("" + (i+2))
}
據我瞭解構造函數不能被繼承和次級構造不能從子類與super
叫象Java。
它們只是一個無用的工件,或者是否存在這種構造的一些明智的用例?
scala> object Bar extends Foo(3)
defined module Bar
scala> Bar.s
res3: String = 5
子類的主構造必須調用父類的構造函數中的一個,不一定主之一。
abstract class A(s: String) {
def this(i: Int) = this(i.toString)
}
class B(i: Int) extends A(i)
除了@ coubeatczech的回答,您還可以,如果你添加一個細化創建抽象類(和特性)的情況下,
scala> :paste
// Entering paste mode (ctrl-D to finish)
abstract class Foo(val s: String) {
def this(i: Int) = this("" + (i+2))
}
// Exiting paste mode, now interpreting.
defined class Foo
scala> val f = new Foo(23) {}
f: Foo = [email protected]
scala> f.s
res3: String = 25
雖然我看到前面一個空的細化(」 {}「),您通常會提供一些額外的定義,通常爲抽象成員提供實現,
scala> abstract class Bar { def bar : Int }
defined trait Bar
scala> val b : Bar = new Bar { def bar = 23 }
b: Bar = [email protected]
scala> b.bar
res1: Int = 23