2011-08-20 32 views
15

Trong một file java duy nhất, là nó có thể có một giao diện công cộng và một lớp công cộng (mà thực hiện giao diện)Java public interface và public class trong cùng một tập tin

Tôi mới đến Java mã hóa và nó được viết trên hầu hết các vị trí trên mạng mà tệp .java không thể chứa nhiều hơn 2 lớp công khai. Tôi muốn biết nếu nó là đúng cho giao diện và một lớp học cũng có.

+0

bản sao có thể có của [Java: Khai báo nhiều lớp trong một tệp] (http://stackoverflow.com/questions/2336692/java-multiple-class-declarations-in-one-file) –

Trả lời

14

Không, không thể. Có thể có tối đa một loại công khai cấp cao nhất cho mỗi .java tệp. JLS 7.6. Top Level Type Declarations nêu rõ các điều sau:

[& hellip;] phải có tối đa một loại [công khai cấp cao nhất] cho mỗi đơn vị biên soạn.

Tuy nhiên, bạn có thể có lớp được bảo vệ theo gói trong cùng một tệp. Đây biên dịch tốt (nếu bạn đặt nó trong một file có tên Test.java:

public interface Test { 
    // ... 
} 

class TestClass implements Test { 
    // ... 
} 
+2

[JLS §7.6 Cấp cao nhất Loại Tuyên bố] (http://java.sun.com/docs/books/jls/third_edition/html/packages.html#26783) –

3

Nguyên tắc Java là chỉ có một public class hoặc giao diện có thể hiển thị trong một tập tin nguồn, và tên phải phù hợp với tập tin (ví dụ thử nghiệm java -> public class Test hoặc giao diện thử nghiệm công cộng, nhưng không phải cả hai)

7

bạn có thể có nhiều lớp công chúng như bạn muốn trong một tập tin nếu bạn sử dụng các lớp lồng nhau trong ví dụ của bạn:

public interface I { 
    public class C implements I { 
     ... 
    } 

    public class D implements I { 
     ... 
    } 

    ... 
} 
..
+0

Chính xác! Tôi chuẩn bị đăng một câu trả lời tương tự. Bạn có thể vui lòng cho tôi biết điểm có cấu trúc như thế không? Nếu tôi cố gắng khởi tạo lớp 'C', tôi buộc phải thực hiện lại các phương thức được định nghĩa trong 'I', ngay cả khi tôi đã làm điều đó khi thách thức lớp 'C'! P.S. Tôi đoán 'C' không cần phải tĩnh .. – Gevorg

+0

@Gevorg - Từ khóa tĩnh có nghĩa là nó giống như một lớp cấp cao nhất. Điểm khác biệt duy nhất ở đây là bạn chỉ có thể tham chiếu đến C là 'I.C' – Kal

+1

Tôi thường sử dụng thành ngữ này nếu tôi định nghĩa một giao diện 'I' và 'thực thi mặc định' của 'I' được sử dụng nếu không có trường hợp đặc biệt nào là cần thiết. Tôi thích điều này vì tôi có thể đóng chúng - không cần phải phân tán chúng trong một số tệp. Và bên cạnh đó nó chỉ đọc tuyệt vời để nói: 'setParam (new Interface.Default());' Nếu tôi không sử dụng một lớp bên trong, tôi phải nghĩ về một tên thông minh, theo cách này tôi có thể gọi nó là 'Default '. – emboss

4
public interface A 
{ 
    public void helloWorld(); 

    public static class B implements A{ 

     @Override 
     public void helloWorld() { 
      System.out.print("Hello World"); 

     } 

    } 
} 
0

Bạn cũng cần hiểu interface driven programming là bước tiếp theo trong khi tìm hiểu giao diện. Nó cho biết thực tế sử dụng giao diện là gì. Vai trò của nó trong chương trình Java (hoặc bất kỳ ngôn ngữ nào khác).

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