Допустим имеем такой код в scala worksheet:
class Point (val x: Int, val y: Int)
trait Rectangular {
def topLeft: Point
def bottomRight: Point
def left = topLeft.x
def right = bottomRight.x
def width = right - left
override def toString = topLeft.x + ", " + topLeft.y + " - " + bottomRight.x + ", " + bottomRight.y
}
class Rectangle(val topLeft: Point, val bottomRight: Point) extends Rectangular
val rect = new Rectangle(new Point(1,1), new Point(10, 10))
//rect: Rectangle = 1, 1 - 10, 10
rect.width
//res0: Int = 9
Не совсем понятно как раскрывается часть кода в классе Rectangle. Документация говорит, что мы не можем иметь поле и parameterless метод с одинаковым именем в одном классе. Здесь возникает вопрос, что происходи с функциями topLeft и bottomRight в момент когда определяется класс Rectangle?
Я полагаю, что класс Rectangle на самом деле подразумевает следующее
class Rectangle(override val topLeft: Point, override val bottomRight: Point) extends Rectangular
и override просто опущены, поскольку оригинальные методы в Rectangular являются абстрактными.
Как вы можете пояснить происходящее в этом коде?