Tôi tự hỏi ngữ nghĩa của việc sử dụng từ khóa abstract
kết hợp với một trait
là gì.Ngữ nghĩa của các đặc điểm trừu tượng trong Scala
Nếu đặc điểm không xác định bất kỳ phương pháp trừu tượng, từ khóa abstract
không ngăn cản tôi từ việc tạo ra một ví dụ:
scala> abstract trait T
defined trait T
scala> new T{}
res0: java.lang.Object with T = [email protected]
Mặt khác, nếu các đặc điểm không xác định một phương pháp trừu tượng, tôi không thể tạo một thể hiện (không thực hiện phương pháp này tất nhiên) không có vấn đề nếu từ khóa abstract
hiện diện hay không:
scala> abstract trait T { def foo : Unit }
defined trait T
scala> new T{}
<console>:9: error: object creation impossible, since method foo in trait T of type => Unit is not defined
new T{}
^
scala> trait T { def foo : Unit }
defined trait T
scala> new T{}
<console>:9: error: object creation impossible, since method foo in trait T of type => Unit is not defined
new T{}
^
Vì vậy, các từ khóa abstract
trước mộtlà gì 210 tốt cho?
Bạn không thể tạo cá thể của một đặc điểm. Khi bạn nói 'new T {}' bạn tạo một đối tượng ẩn danh kết hợp đặc điểm T. – sschaef