2017-03-13 18 views
8

Giao diện thành viên chỉ có thể được xác định bên trong một lớp cấp cao nhất hoặc giao diện hoặc trong ngữ cảnh tĩnh.Cách xác định giao diện thành viên trong ngữ cảnh tĩnh trong java?

Trường hợp A: Interface trong một lớp học cấp cao nhất hoạt động hoàn hảo

package multiplei.interfaces.test; 

public class InterfaceBetweenClass { 

    interface Foo { 
     void show(); 
    } 

    class InnerClass implements Foo{ 
     public void show(){ 
      System.out.println("Inner Class implements Foo"); 
     } 
    } 

    public static void main(String[] args) { 
     new InterfaceBetweenClass().new InnerClass().show(); 
    } 

} 

Trường hợp B: Interface trong một giao diện làm việc tốt.

public interface Creatable { 
    interface Foo{ 
     void show(); 
    }} 

Trường hợp C: Tôi biết nó có vẻ ngu ngốc rằng tại sao người ta xác định một giao diện trong một bối cảnh tĩnh. Nhưng nó cung cấp cho tôi thông báo lỗi tương tự khi tôi cố gắng xác định giao diện trong ngữ cảnh tĩnh.

package multiplei.interfaces.test; 

public class InterfaceBetweenClass { 
    public static void main(String[] args) { 
     interface Foo { //Line 5 
      void show(); 
     } 
    } 

}} 

Nhưng dòng số 5 mang lại cho tôi thông báo lỗi sau "The member interface Foo can only be defined inside a top-level class or interface or in a static context. "Xin hãy giúp tôi ra với điều này Nếu một giao diện có thể được định nghĩa trong bối cảnh tĩnh thì làm sao?

+0

Thậm chí nếu có thể, nó sẽ không tạo ra một giao diện nào trong một phương thức. Giao diện này sẽ không hiển thị bên ngoài phạm vi phương thức, thậm chí không phải trong các lớp bên trong vô danh tạo ra sau này trong cùng một phương thức. –

+0

@TimothyTruckle Tôi không biết về điều đó. Nó có vẻ là tình huống tương tự như với "lớp học địa phương" và những người được phép trong các phương pháp: http://stackoverflow.com/questions/2428186/use-of-class-definitions-inside-a-method-in-java? noredirect = 1 & lq = 1 – Thilo

+1

@Thilo * 'Có vẻ như tình huống tương tự như với "lớp học địa phương"' * không hoàn toàn. Bạn tạo lớp địa phương để sử dụng ngay lập tức trong cùng một phương thức (và không nơi nào khác) trong khi bạn tạo các giao diện để sử dụng tại * một số nơi khác * thay vì một số lớp cụ thể đang triển khai nó. –

Trả lời

4

Bạn không thể định nghĩa các giao diện trong phương pháp.

tôi nghĩ rằng kịch bản được thông báo lỗi được đề cập đến là việc xác định một giao diện bên trong một lớp bên trong (có thể được thực hiện, nhưng chỉ khi đó là một lớp bên trong static):

class A{ 
    static class X{ 
    interface Y{} 
    } 
} 
+0

Lớp lồng nhau tĩnh giống như các lớp cấp cao nhất nên được đề cập trong trường hợp A tôi đoán :( –

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