Он делает именно то, что вы сказали.Вы добавили второй параметр конструктора при передаче его в конструктор суперкласса, а затем использовали суперкласс 'getContent
, чтобы предоставить значение, возвращаемое из подкласса' getContent
.
.из-за того, что параметры конструктора (те, которые не привязаны к свойствам, потому что они являются частью case class
или потому что они были объявлены с ключевым словом val
) находятся в области видимости всего тела класса.Конструктор класса - это та часть его тела, которая вне любого метода.Таким образом, ссылки на параметры конструктора в теле метода вынуждают параметр конструктора быть сохраненным в поле, чтобы он имел необходимую степень.Обратите внимание, что ваш println
вызов в getContent
вызывает в этом случае такое скрытое поле параметра конструктора.
Ответ на комментарий"Есть ли альтернативный способ определить его, чтобычтобы избежать этого? Или, по крайней мере, если я никогда не буду ссылаться на параметры конструкторов подкласса, их поля будут выделены (истощение памяти)? ":
Если единственные ссылки на параметры простого конструктора (*) находятся вСобственно конструктор (т. е. вне какого-либо тела метода, а инициализаторы val
и var
не квалифицируются как тела метода), тогда не будет создано невидимое поле для хранения параметра конструктора.
Однако, если естьбольше, чем вы пытаетесь «избежать», чем эти невидимые поля, я не понимаю, о чем вы спрашиваете.
(*) Под «простыми параметрами конструктора» я подразумеваю те, которые не являются частью класса case ине содержит ключевое слово val
.