Với đoạn mã sau:Tại sao việc ghi đè loại trừu tượng đã triển khai không thể thực hiện được?
class A {
class B
type C <: B
trait D
}
class E extends A {
type C = B
}
class F extends E {
override type C = B with D
}
Tại sao biên dịch trình bày Scala IDE trong Eclipse Indigo IDE phàn nàn với thông báo lỗi trọng loại C trong lớp E, bằng F.this.B; loại C có loại không tương thích?
Sau khi tất cả các lớp "B" chỉ được "sửa đổi" với đặc điểm "D" và do đó hai định nghĩa loại có cùng loại cơ sở, là "B". Do đó định nghĩa kiểu tương thích.
Mã bên dưới hoạt động. Tôi xem xét các quy tắc về phân công loại tương tự như chuyển nhượng biến, chẳng hạn như:
class Foo
trait Bar
val a: Foo = new Foo
val fooWithBar: Foo = new Foo with Bar
Tôi hiểu sai?
Foo with Bar là một loại phụ của Foo. Đây không phải là vấn đề. Bạn không được phép xác định lại một thành viên loại trong khi nó được sửa, ngay cả với một kiểu con. Nếu bạn có lớp Bar mở rộng Foo, bạn cũng không thể định nghĩa lại thành viên kiểu từ Foo thành Bar. –