2012-03-21 35 views
5

Tôi đang sử dụng plugin kiểm tra nhật thực. Tôi có vài phương pháp trong một lớp A có bị ghi đè trong lớp B. Tôi đã cảnh báo sau đây cho hầu hết các phương phápTại sao CheckStyle gợi ý rằng tôi sử dụng một phương pháp cuối cùng?

Chức năng SearchAndReplace không được hình thành để được thừa hưởng
- nó phải được khai báo trừu tượng hoặc thức hoặc để trống.

Có lợi thế nào để khai báo phương thức cuối cùng không?

EDIT

Tôi biết những gì từ khóa cuối cùng là cho. Tôi biết nó ngăn chặn việc ghi đè các phương pháp, có những ưu điểm khác, như hiệu năng hay bất cứ thứ gì như thế không?

+1

phương pháp cuối cùng không thể được ghi đè lên! – Rakesh

+1

Tôi tò mò muốn biết làm thế nào các plugin có thể biết những gì các phương pháp đã được hình thành như. – EJP

Trả lời

12

Khi bạn khai báo phương thức là cuối cùng, bạn đang nói rằng phương pháp có thể không bị ghi đè.

Trích từ ngôn ngữ Java Specification:

Một phương pháp có thể được tuyên bố chính thức để ngăn chặn các lớp con từ trọng hoặc che giấu nó.

Đây là lỗi biên dịch để cố gắng ghi đè hoặc ẩn phương thức cuối cùng.

Khẩu hiệu chung (do Joshua Bloch Tôi tin) là

                      "Thiết kế và tài liệu cho thừa kế hoặc Else Cấm nó"

Vì vậy, trừ khi ý định của bạn là để cho các lớp con ghi đè phương thức (và có khả năng thay đổi hành vi o f siêu hạng (tất cả các phương thức là virtual trong Java)) sau đó thực hiện phương thức cuối cùng.

0

Trong Java, từ khóa chính thức được áp dụng trong bối cảnh khác nhau:

Từ khóa cuối cùng là một modifier có nghĩa là lớp cuối cùng không thể được mở rộng, một biến không thể được sửa đổi, và cũng là một phương pháp có thể không được ghi đè.

4

Phương thức final đảm bảo rằng không có lớp con nào ghi đè phương thức. Rất có thể là thời gian chạy có thể tận dụng lợi thế này để đạt được hiệu suất (có thể nhẹ).

Lý do chính để tạo phương thức final là để ngăn người kế thừa ghi đè phương thức. Đây có thể là một cân nhắc quan trọng (ví dụ, hãy tưởng tượng một phương pháp được gọi là bool checkSecurity() - cho phép người khác ghi đè lên điều này sẽ là xấu!)

0

Khi một phương pháp được khai báo là an toàn để được gọi trong hàm dựng (trừ các phương thức không cuối cùng khác viện dẫn trong nó). Nếu nó không phải là subclases cuối cùng có thể ghi đè nó theo cách cố gắng truy cập các trường được giới thiệu trong lớp con. Và điều này thường không phải là những gì bạn mong đợi. tôi nghĩ rằng có một số lợi ích thực hiện khi bạn viết cho các thiết bị di động nhưng tôi không phải là chuyên gia ở đó.

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