2011-11-10 41 views
21

thể trùng lặp:
When do you use Java's @Override annotation and why?Mục đích của chú thích @Override là gì?

Câu hỏi của tôi là rất cơ bản tại sao chúng ta mọi người sử dụng @Override chú thích và tầm quan trọng của chú thích này là gì?

Trong JDK cũ lý do tại sao nó không hiển thị như cảnh báo, nhưng trong JDK mới nhất nó yêu cầu sau đó Tại sao ..?

+0

Đây là cuộc thảo luận về cùng một chủ đề [Khi nào bạn sử dụng chú thích @Override của Java và tại sao?] [1], có vẻ hữu ích. [1]: http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – COD3BOY

+0

(http://docs.oracle.com/javase /tutorial/java/annotations/predefined.html)[Liên kết này có thể giúp bạn] –

Trả lời

32

Giả sử bạn có:

public class Foo 
{ 
    public void bar(String x, String y) {} 
} 

public class Foo2 extends Foo 
{ 
    public void bar(String x, Object y) {} 
} 

Bạn thực sự nghĩa Foo2.bar để ghi đè Foo.bar, nhưng do một sai lầm trong chữ ký, nó không. Nếu bạn sử dụng @Override bạn có thể nhận được trình biên dịch để phát hiện lỗi. Nó cũng chỉ ra cho bất kỳ đọc mã này ghi đè phương pháp hiện có hoặc triển khai giao diện - tư vấn cho họ về hành vi hiện tại và tác động có thể của việc đổi tên phương thức.

Thêm vào đó, trình biên dịch của bạn có thể cung cấp cho bạn một cảnh báo nếu một phương pháp ghi đè một phương pháp mà không định @Override, có nghĩa là bạn có thể phát hiện nếu ai đó đã thêm một phương thức với cùng một chữ ký vào một lớp cha mà bạn không biết về nó - bạn có thể không muốn để ghi đè phương pháp mới, vì phương pháp hiện tại của bạn có thể có ngữ nghĩa khác nhau. Trong khi @Override không cung cấp cách "không ghi đè" phương pháp, ít nhất nó cũng làm nổi bật vấn đề tiềm ẩn.

6

Chỉ cần chắc chắn tại thời gian biên dịch mà chúng tôi đang thực sự trọng phương pháp, cũng cho biết thêm số lượng tốt với khả năng đọc mã

@Override là có từ JDK 1.5, vì vậy bạn có thể nhận được cảnh báo ở trước

2

Sử dụng chú thích này, bạn có thể chắc chắn rằng bạn đang thực sự ghi đè phương thức cơ bản, không tạo phương thức mới (ví dụ, bằng cách vô tình sử dụng các đối số sai). Nếu bạn sử dụng chú thích @Override, bạn sẽ nhận được lỗi thời gian biên dịch nếu có điều gì đó không đúng.

+0

Tôi không nhận được bất kỳ lỗi thời gian biên dịch nào, vui lòng cho tôi biết, tôi đã bỏ lỡ điều gì ở đây [http://stackoverflow.com/questions/ 23191807/sử dụng-of-ghi đè-chú thích-in-custom-listener-class-không-làm việc-như mong đợi) – paul

1

Để xác minh trong thời gian biên dịch bạn thực sự ghi đè phương thức. IDE có thể cho bạn biết ngay lập tức khi bạn cung cấp chú thích đó.

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