2011-12-04 47 views
30

Tôi đã đọc qua giao diện Map.Entry, khi tôi nhận thấy đó là giao diện 'tĩnh'. Tôi không hoàn toàn hiểu được giao diện tĩnh là gì và nó khác với giao diện thông thường như thế nào?giao diện tĩnh trong java là gì?

public static interface Map.Entry<K,V>

Đây là định nghĩa của giao diện. Tài liệu tại đây: http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html

+3

bản sao có thể có của http://stackoverflow.com/questions/71625/why-would-a-static-inner-interface-be-used-in-java –

+0

Xem http://stackoverflow.com/questions/71625/why-would-a-static-inner-interface-be-used-in-java – esaj

+0

Đó có phải là thích hợp với các giao diện bên trong không? – brainydexter

Trả lời

30

Tôi tò mò về trường hợp khi nó không phải là giao diện bên trong.

Bộ sửa đổi static chỉ được phép trên lớp hoặc giao diện lồng nhau. Trong ví dụ của bạn Entry được lồng trong giao diện Map.

Đối với giao diện, công cụ sửa đổi static thực sự là tùy chọn. Sự khác biệt không có ý nghĩa đối với các giao diện vì chúng không chứa mã nào có thể truy cập bên ngoài this.

+0

Cảm ơn bạn đã chỉ ra điều đó. Tôi đã không nhận thức được thực tế là Entry là một giao diện bên trong và sửa đổi tĩnh chỉ được phép trên lớp lồng nhau/giao diện. – brainydexter

+11

"Sự khác biệt không có ý nghĩa đối với giao diện" ... Đây là những gì gây nhầm lẫn rất nhiều. Không có sự khác biệt. Họ không nên cho phép từ khóa "tĩnh" cho giao diện. Tôi có ở đây không? –

+0

Tôi không hiểu giải thích đó. Khi tôi hiểu phương thức tĩnh là phương thức mà bạn không thể ghi đè, tương tự về lớp, nếu lớp là tĩnh, bạn không thể ghi đè lên phương thức đó vì tất cả chúng đều tĩnh, nhưng giao diện không thể là nguyên nhân tĩnh trong trường hợp này bạn sẽ không có thể ghi đè lên phương pháp đó. Vì vậy, tôi không hiểu làm thế nào giao diện có thể được tĩnh? –

4

Giao diện bên trong tĩnh và giao diện bên trong giống nhau, tất cả các quy tắc truy cập đều giống như với lớp tĩnh bên trong. Vì vậy, giao diện bên trong có thể được truy cập chỉ khi bạn có quyền truy cập vào lớp cha/giao diện của nó. Trong trường hợp dưới đây bạn sẽ có quyền truy cập vào giao diện B chỉ từ gói giao diện A, bởi vì A có công cụ sửa đổi truy cập mặc định. BTW: giao diện B có thể là tĩnh hay không.

interface A { 
    void testA(); 
    public interface B { 
     void testB(); 
    } 
} 
+0

Tôi là curios về trường hợp khi nó không phải là một giao diện bên trong. – brainydexter

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