Tôi đã đọc về điều này gần đây trên SO (và tôi không thể tìm thấy liên kết ngay bây giờ, nhưng đây là một trong những bài viết "tại sao ngôn ngữ động" tốt và câu trả lời lớn S. Lott có nhiều ý kiến) và câu trả lời là:
Bạn có thể. Trong Groovy đặc biệt, bạn có thể định nghĩa các giao diện trong Java hoặc Groovy và triển khai chúng. Tuy nhiên, với cách gõ vịt (Groovy cho phép nhưng cũng cho phép loại rõ ràng) nhiều người sẽ nói "tại sao lại bận tâm?" Nguồn là tài liệu riêng của nó, giao diện nằm trong nguồn, "sử dụng nguồn", v.v.
Cá nhân, điều này làm tôi phát điên - Tôi thích thời gian biên dịch (hoặc thực sự, thời gian dev) mà Java cung cấp tôi, nhưng đó là một cuộc tranh luận khác. Nếu bạn đang sử dụng Groovy, đó là bởi vì bạn muốn viết rằng mã súc tích và rõ ràng tuyệt vời đến từ việc gõ vịt. Trong trường hợp đó, các giao diện cần tránh trừ khi cần thiết.
Chúng cần thiết ở đâu? Giữa các phần của một chương trình và trong API công khai cho một chương trình (mặc dù chúng có thể là các lớp trừu tượng). Nếu không, tôi sẽ nói rằng bạn nên cố gắng tránh chúng bằng các ngôn ngữ được đánh máy. Điều này buộc bạn phải viết các tài liệu trên các lớp, hoặc viết mã rõ ràng đến mức nó giống nhau.
Tôi nghĩ rằng đây là thực tế khủng khiếp, BAO GIỜ đây là một phần của sự chuyển đổi mô hình theo hướng ngôn ngữ động.Và tôi nghĩ rằng nếu bạn tránh tách giao diện khỏi việc triển khai đủ, bạn sẽ hiểu 'lý do' đằng sau nó. Tôi vẫn không, mặc dù nó có rất nhiều để làm với không lặp lại mã (giữ DRY).
Edit: Got một số rõ ràng ra khỏi máy tính :) Một trong những lý do chính không để tách giao diện từ việc thực hiện là để bạn di chuyển ra khỏi một sự phụ thuộc vào loại. Trong kiểu gõ vịt, như bạn đã biết, tôi không quan tâm nếu đó là người triển khai giao diện Vehicle
(ví dụ). Tôi chỉ quan tâm nếu nó có phương pháp go
với 2 thông số. Vì vậy, bạn càng làm việc với các giao diện, bạn càng viết Java trong Groovy ("bạn có thể viết Fortran bằng bất kỳ ngôn ngữ nào"). Điều này nên tránh, vì các ngôn ngữ mới mở ra cho bạn những thứ mới.
Cảm ơn rất nhiều. Một câu trả lời rất hay. Tôi sẽ không sử dụng chúng! –
@Martin, cảm ơn bạn, tôi đã thêm câu trả lời của tôi một chút để giải thích rõ hơn. –