برای داشتن چندین constructor کافیه که overload های مختلف برای متد this بنویسید:
class Point2D(var x: Int, var y: Int) {
override def toString: String = s"[$x, $y]"
}
class Point3D(_x: Int, _y: Int, var z: Int) extends Point2D(_x, _y) {
def this(p: Point2D, z: Int) {
this(p.x, p.y, z)
println("Secondary Constructor")
}
override def toString: String = s"[$x, $y, $z]"
}
...
val p1 = new Point2D(1, 1)
val p2 = new Point3D(1, 2, 4)
val p3 = new Point3D(p1, 3)
چنتا نکته:
1. حتما باید توی اولین خط this صدا زده بشه (مشابه جاوا)
2. به کلمه کلیدی var و اسم پارامترها هم دقت کنید. اگر به جای _x از x استفاده بشه بین x ای که مال Point2D هست و x ای که برای Point3D هست ابهام به وجود میاد. بهتره که اسم متفاوتی داشته باشن.