Tôi chỉ tình cờ gặp một số tình huống có vẻ lạ đối với tôi. Dù sao tôi cũng có thể bỏ lỡ điều hiển nhiên ở đây, xin hãy giúp tôi.Nhà xây dựng Scala có bị trùng lặp không?
Xem xét Scala repl kịch bản sau đây:
scala> class X(val s: String) { def run=println("(X): "+s) }
defined class X
scala> class Y(s: String) extends X("MY "+s) { override def run=println("(Y): "+s) }
defined class Y
scala> new Y("fish").run
(Y): fish
Trong kịch bản tôi đang xác định một lớp X với một thuộc tính lớp "val s". Sau đó, tôi định nghĩa một lớp Y được cho là lấy một đối số hàm tạo và chuyển nó tới X- nó làm. Để hiển thị sự khác biệt tôi sửa đổi "s" trước khi tôi đưa nó cho X ("MY" + s).
Cuối cùng, tôi tạo một Y mới và gọi "chạy". Điều này in "cá" vào giao diện điều khiển vì vậy rõ ràng thuộc tính "s" của lớp "X" đã được shadowed bởi một thuộc tính mới "s" mà tôi tạo ra trong "Y".
Tôi đã thử với Scala 2.8 và 2.9.1 với cùng một kết quả.
Đây có phải là cách này không? Tôi phải làm gì nếu tôi chỉ muốn truyền các đối số constructor từ lớp của tôi xuống một lớp cha và không muốn lưu thông số vào trong lớp con? Thực hành phổ biến ở đây là gì?
Cảm ơn!
Cảm ơn bạn đã giải thích chi tiết! –
Tham số lớp s trong Y đổ bóng các giá trị s được định nghĩa trong X. – mkneissl