2009-10-09 35 views
32

Tôi khá mới đối với Java và tôi đang sử dụng API mới. Tôi đã xem qua phương pháp ghi đè này và tôi không chắc chắn điều này được gọi là:Loại phương pháp ghi đè này được gọi là gì trong Java?

public void exampleMethod() { 
    Button loginButton = new Button("login"){ 
     public void onSubmit(){ 
      //submit code here 
     } 
    }; 
} 

Từ những gì tôi hiểu, điều này sẽ ghi đè phương thức onSubmit của lớp Nút. Tôi chưa bao giờ bắt gặp kiểu ghi đè này trước đây. Có một tên cụ thể cho nó? Tôi muốn đọc thêm về nó nhưng tôi không thể tìm thấy nó. Tất cả các tìm kiếm của tôi cho đến nay đều dẫn đến phương pháp thường xuyên ghi đè bằng cách tạo một lớp mới, đó là những gì tôi đã quen thuộc.

Tôi đánh giá cao nếu ai đó có thể chỉ cho tôi đúng hướng.

Cảm ơn.

+3

Câu hỏi hay ... và đó là loại điều rất khó tra cứu trong một tham chiếu! 1 Rất may, vì tôi đã cố gắng hỏi cùng một Q trên SO, nó tìm thấy Q của bạn cho tôi. – LarsH

Trả lời

28

Đó là một anonymous inner class.

Trong ví dụ trên thay vì tạo private class mở rộng Button, chúng tôi tạo lớp con của nút và cung cấp phương pháp ghi đè phù hợp với phần còn lại của mã.

Vì lớp mới này được tạo khi đang chạy, nó không có tên, do đó ẩn danh. Vì nó được xác định trong một lớp khác, đó là lớp ẩn danh bên trong.

Đây có thể là một lối tắt rất tiện dụng, đặc biệt là đối với các lớp Listener, nhưng nó có thể khiến mã của bạn khó theo dõi nếu bạn bị mang đi và định nghĩa phương thức đường thẳng quá dài.

12

Đó là anonymous inner class. Về cơ bản nó tạo ra một lớp mới có nguồn gốc từ một quy định (Button trong trường hợp này, mặc dù bạn có thể sử dụng cùng một kỹ thuật để thực hiện các giao diện) và ghi đè các phương thức thích hợp. Nó cũng có thể chứa các phương thức khác, nhưng chúng chỉ có sẵn trong lớp đó.

Lớp này có quyền truy cập vào biến cục bộ cuối cùng trong cùng một phương thức và nếu bạn đang viết phương thức thể hiện, nó có tham chiếu ngầm đến this (để bạn có thể gọi các phương thức khác trong lớp "chính").

+0

Cảm ơn bạn. Tôi đã tìm kiếm phương pháp bên trong, nhưng không nghĩ nó là một lớp bên trong, ít hơn một lớp bên trong vô danh. Tắt để đọc về chúng tôi đi! –

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