2011-04-13 37 views
23

Thực tiễn tốt có sử dụng từ khóa override khi triển khai phương pháp trừu tượng được xác định trong các đặc điểm không?Sử dụng từ khóa ghi đè để triển khai các phương pháp trừu tượng

trait Tooth { 
    def ache(): Unit 
} 

class Molar extends Tooth { 
    override def ache(): Unit = {} 
} 

Trong ví dụ trên, tôi hiểu rằng từ khóa ghi đè là tùy chọn; nhưng nó có được khuyến khích không? Tôi nên rơi vào bên nào của sự thỏa hiệp và sự an toàn?

+0

đối số ... –

+2

@Kim - Làm thế nào, chính xác? –

Trả lời

25

override thực hiện một điều cho bạn ở đó: khi xóa Tooth.ache nhưng không thực hiện sau này, bạn sẽ gặp lỗi trình biên dịch. Cụ thể, việc triển khai lực lượng này của Tooth (được viết bởi chính bạn hoặc người khác) được "đóng" thành Tooth theo một nghĩa nào đó, cụ thể là các phương pháp không dùng nữa sẽ biến mất (hoặc ít nhất là xem xét lại).

Điều này có thể hoặc không thể mong muốn.

+11

OTOH, nếu ai đó một ngày nào đó thực hiện 'ache' bên trong' Tooth', nhằm cung cấp _the_ giải pháp cuối cùng cuối cùng, anh ta/cô ấy thậm chí sẽ không biết rằng vẫn sẽ có các triển khai cũ trong mã. –

+2

Tôi đồng ý với điều này. Tôi đã thấy nhiều ví dụ về mã chết vì một phương thức trừu tượng đã được đổi tên. –

15

Cá nhân, khi tôi nhìn thấy

override def whatever() 

điều đầu tiên tôi nghĩ là, "Tôi tự hỏi thế nào điều này được cho là để hành xử trước đây?"

Vì đây là một ý nghĩ không hữu ích nếu đó là một phương pháp trừu tượng, tôi thấy nó còn linh hoạt hơn cả để an toàn hơn.

7

Tôi luôn sử dụng nó, để cho biết thành viên đã được khai báo trên các lớp siêu, ngay cả khi trừu tượng.

+1

Tôi tin rằng đây là câu trả lời hay nhất (cho đến nay), nhưng nó giới hạn bản thân bằng cách quá ngắn. Tôi sẽ thêm rằng một ghi đè có một ý định * khác biệt * nhiều từ một phương pháp thông thường (một phương pháp mới chỉ thêm hành vi; một ghi đè có khả năng thay đổi nó). Và bất cứ khi nào có ý định khác nhau là cần thiết, tốt nhất là làm cho nó rõ ràng. – rsenna

+1

OTOH, nếu ai đó một ngày nào đó đặt một thực hiện đau bên trong răng, nhằm cung cấp các giải pháp cuối cùng cuối cùng, anh ta/cô ấy thậm chí sẽ không biết rằng vẫn sẽ có triển khai cũ trong mã. –

12

Tôi thường không sử dụng ghi đè khi triển khai phương pháp trừu tượng. Nó không sai, nhưng dư thừa, và tôi thích giữ mã của tôi càng ngắn càng tốt trong khi duy trì sự rõ ràng. Nhưng tôi nhận ra đó không phải là một trường hợp rõ ràng.

Các vấn đề liên quan