why using plain val in non-final classes
问题 If class is not a final one, it may be extended. There are two possibilities for values: it may be overridden and should be lazy for it, it may not be overridden and should be final. If val is final - you may assume that all computations over it would work through class hierarchy. If val may be overriden you should declare it lazy for not becoming broken after extending. You may leave val plain and this gives no guaranties it would be extended in right way. What use cases imply using plain