Nếu bạn có thể ghi đè một var bằng var, thì thành viên ghi đè có thể có loại hẹp hơn. (Đó là cách ghi đè được xác định.)
Sau đó, bạn có thể chỉ định giá trị của loại rộng hơn và sau đó đọc nó mong đợi loại hẹp hơn và không thành công.
Minh họa setter tham gia:
scala> class A ; class B extends A
defined class A
defined class B
scala> abstract class C { var x: A } ; class D extends C { var x: B = _ }
<console>:13: error: class D needs to be abstract, since variable x in class C of type A is not defined
(Note that an abstract var requires a setter in addition to the getter)
abstract class C { var x: A } ; class D extends C { var x: B = _ }
^
scala> abstract class C { var x: A }
defined class C
scala> class D extends C { var x: B = _ ; def x_=(a: A) = ??? }
defined class D
Nguồn
2015-07-14 08:11:24
Tại sao một người nào đó muốn 'ghi đè' một' var'? Ý nghĩa của việc ghi đè một var là gì? –
Bởi vì việc ghi đè nó không thực sự có ý nghĩa nhiều. Nó có thể thay đổi, bạn chỉ có thể thay đổi nó.Điều gì làm trọng số thậm chí có nghĩa là gì? http://stackoverflow.com/questions/16413986/how-to-override-a-mutable-variable-in-trait-in-scala – Falmarri
@Sarvesh: Cảm ơn phản hồi nhanh của bạn. Tôi chỉ cố gắng để hiểu, tại sao nó được phép cho val? – mogli