2012-01-28 93 views
16

Gần đây, tôi gặp phải một vấn đề bí ẩn trong một dự án Android, mà tôi đã mô tả here. Tôi bằng cách nào đó giải quyết vấn đề, nhưng vẫn không biết lý do chính xác đằng sau nó.Java: gọi phương thức lớp bên ngoài trong lớp bên trong vô danh

Giả sử tôi muốn gọi hàm foo() trong lớp bên trong. Câu hỏi đặt ra là, sự khác biệt giữa gọi đó là trực tiếp như

foo(); 

hoặc gọi nó với cá thể lớp ngoài

OuterClass.this.foo(); 

Bên cạnh đó, tôi sẽ đánh giá cao nếu có ai có thể kiểm tra những gì tôi cuối cùng question liên quan đến này, và cho tôi manh mối về lý do lỗi xảy ra. Cảm ơn nhiều.

PS: Tôi đọc ở đâu đó rằng lớp bên trong không tĩnh sẽ luôn giữ một thể hiện của lớp bên ngoài. Vì vậy, nó sẽ gọi chức năng bên ngoài bằng cách sử dụng trường hợp đó nếu tôi chỉ sử dụng foo()?

Trả lời

20

Sau này rõ ràng hơn và sẽ cho phép bạn gọi phương thức lớp ngoài nếu có trong lớp bên trong có cùng tên.

class OuterClass { 
    void foo() { System.out.println("Outer foo"); } 

    View.OnClickListener mListener1 = new View.OnClickListener() { 
     void foo() { System.out.println("Inner foo"); } 

     @Override public void onClick(View view) { 
      foo(); //Calls inner foo 
      OuterClass.this.foo(); //Calls outer foo 
     } 
    } 

    View.OnClickListener mListener2 = new View.OnClickListener() { 
     @Override public void onClick(View view) { 
      foo(); //Calls outer foo 
      OuterClass.this.foo(); //Calls outer foo 
     } 
    } 
} 
+0

Thx. Nhưng tôi chắc chắn rằng lớp bên trong không có chức năng có cùng tên trong trường hợp của tôi. Có sự khác biệt cụ thể nào khác ngoại trừ phần rõ ràng không? – Selkie

+0

Không phải trong ngữ cảnh này. Tôi đã xem xét câu hỏi nguồn của bạn và thực tế là thay đổi bạn đã thực hiện đã giải quyết nó là không thể giải thích được. Điều đó không nên có ảnh hưởng gì cả. Làm điều này là hoàn toàn để làm sáng tỏ bất kỳ sự mơ hồ trong những gì bạn đang đề cập đến ... –

+0

bạn r đúng. Tôi đã phạm sai lầm trong đó. Cảm ơn sự khai sáng! – Selkie

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