考虑以下代码:
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)
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 = $anon$1@13d874e
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 = $anon$1@1e17c6d
scala> b.bar
res1: Int = 23