2013-02-14 56 views
8

Tôi đã tìm thấy chú thích @Override rất hữu ích trong khi ghi đè một số phương thức siêu lớp trong các lớp dẫn xuất của tôi. Về cơ bản trình biên dịch phát hiện các lỗ hổng trong chương trình của tôi sớm mà luôn luôn là một điều tốt. Nhưng tại sao không có chú thích @Implements trong Java?Tại sao không có chú thích @Implements trong Java?

+0

'@ Ghi đè' là loại hình thức; nó không thực sự cần thiết. Trình biên dịch sẽ không thất bại nếu bạn không có chú thích đó. Tuy nhiên, khi bạn đang triển khai * một giao diện, trình biên dịch sẽ hét lên nếu bạn không thực hiện mọi phương thức đã định nghĩa trong giao diện đó. – Makoto

+0

@Makoto - Tôi nghi ngờ anh ấy có nghĩa là IDE của anh ấy chứ không phải trình biên dịch. Điều đó nói rằng, nếu bạn đã làm 'javac -Xlint: ghi đè' (hoặc chỉ' -Xlint') nó * sẽ * cho bạn biết về nó, vì vậy có lẽ anh ta đang làm điều đó. –

+0

(sẽ cho bạn biết về nó nếu bạn đã thực hiện một lỗi khi ghi đè, tôi nên nói). –

Trả lời

14

Vì bạn sử dụng @Override cho các phương thức do giao diện xác định.

(Vâng, bạn đang "thực hiện" hơn là "trọng" ... nhưng @Override được sử dụng cho cả hai)

+0

Chỉ kể từ JDK 6, mặc dù. –

+2

@RyanStewart - Đó là sự thật, nhưng kể từ khi chúng tôi phát hành 6 năm trước và trên thực tế tại EOL cho 6 tôi thực sự đã ngừng đủ điều kiện trừ khi đó là một điều 6 so với 7 :) –

+1

Tuy nhiên, thật đáng buồn, trong năm qua (4 năm sau khi bình luận cuối cùng) Tôi đã phải mã cổng để Java 5 để nó có thể chạy bên trong Oracle 11. Old Javas không bao giờ chết, họ chỉ ẩn trong chờ đợi cho người không tự nguyện. –

0

Để thực hiện một giao diện từ khóa đã tồn tại: implements. nhưng để ghi đè, không có từ khóa nào tồn tại. @Override không phải là từ khóa nhưng hoạt động tương tự.

1

Để triển khai giao diện chúng tôi sử dụng implements và nếu có bất kỳ phương pháp nào tồn tại trong giao diện đó thì chúng tôi sẽ ghi đè các phương pháp đó để cung cấp triển khai.

Vì vậy, chỉ có chú thích @Override vì trong cả hai trường hợp (lớp hoặc giao diện), chúng tôi luôn ghi đè.

2

Vì Java 6 bạn có thể sử dụng @Override trên các phương thức lớp thực hiện các phương thức được xác định trong giao diện

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