Đặc điểm, kế thừa và giao diện trong Groovy, khi nào nên sử dụng chúng?


10

Tôi đang học hỏi và tôi vừa tìm hiểu về tính năng mới được thêm vào trong 2.3, đó là bổ sung các Đặc điểm . Bây giờ với tôi có vẻ như Traits cho phép bạn cơ bản làm mọi thứ mà một siêu hạng và Giao diện có thể làm.

Liệu việc bổ sung các Đặc điểm vào Groovy có làm cho Kế thừa và Giao diện bị lỗi thời không?

Và nếu không, thời gian tốt nhất để sử dụng mỗi cơ chế này là gì?



"Groovy và tôi vừa tìm hiểu về tính năng mới được thêm vào trong 2.3, đó là bổ sung các Đặc điểm" - Các đặc điểm lần đầu tiên được thêm vào Groovy trước 2.0 thông qua một addon AST được gọi là trợ lý Groovy ++, xem code.google.com/p / groovypptest / wiki / Đặc điểm
Vorg van Geir

Bạn thực sự nên đọc các tài liệu về đặc điểm. Không có câu trả lời nào được đưa ra ở đây sẽ được hoàn thành mà không đề cập đến mọi thứ mà các tài liệu nói về; Bạn đặc biệt nên chú ý đến các phần 13 - end
smac89

Câu trả lời:


4

Các đặc điểm kết hợp tốt nhất của cả hai thế giới - sự kế thừa của các lớp (trừu tượng) và việc thực hiện các giao diện. Một đặc điểm có thể chứa các triển khai mặc định của các phương thức và một loại có thể thực hiện nhiều tính trạng cùng một lúc. Điều này cho phép một số loại thừa kế, nhưng theo một cách tốt, tránh kim cương chết chóc .

Nếu bạn không biết bắt đầu như thế nào, thì hãy sử dụng các đặc điểm. Bạn có được sự linh hoạt và có thể chuyển sang giao diện hoặc kế thừa lớp sau này nếu cần.


3
Trong các giao diện bạn có thể định nghĩa phương thức mặc định, vậy sự khác biệt logic là gì?
Gilad Baruchian

tôi cũng bối rối với sự khác biệt giữa các đặc điểm và phương thức mặc định giao diện. Tôi chỉ có thể giả sử các đặc điểm trong Groovy được giới thiệu sớm hơn các phương thức mặc định trong java
olyv

Một đặc điểm cho phép bạn xác định các trường thông thường, không chỉ các trường tĩnh vì giao diện của java giới hạn bạn
smac89

Nếu bạn bối rối về đặc điểm, hãy đọc tài liệu . Họ rất nhiều thông tin
smac89

1
@ smac89, cảm ơn, điều đó thực sự hữu ích!
olyv
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.