Mục đích của việc có nhiều hơn một lớp trong một tệp Java là gì? Tôi mới làm quen với Java.
Đã chỉnh sửa: Điều đó có thể đạt được bằng cách tạo một lớp bên trong bên trong một lớp công khai, phải không?
Mục đích của việc có nhiều hơn một lớp trong một tệp Java là gì? Tôi mới làm quen với Java.
Đã chỉnh sửa: Điều đó có thể đạt được bằng cách tạo một lớp bên trong bên trong một lớp công khai, phải không?
Câu trả lời:
Có, nó có thể. Tuy nhiên, chỉ có thể có một lớp cấp cao nhất công khai cho mỗi .java
tệp và các lớp cấp cao nhất công khai phải có cùng tên với tệp nguồn.
Mục đích của việc bao gồm nhiều lớp trong một tệp nguồn là để gói chức năng hỗ trợ liên quan (cấu trúc dữ liệu nội bộ, lớp hỗ trợ, v.v.) cùng với lớp công khai chính. Lưu ý rằng bạn luôn được phép không làm điều này - ảnh hưởng duy nhất đến khả năng đọc (hoặc không) của mã của bạn.
java.awt.LightweightDispatcher
?
Nếu bạn muốn triển khai một lớp công khai, bạn phải triển khai nó trong một tệp có cùng tên với lớp đó. Một tệp đơn có thể chứa một công khai và một số lớp riêng. Điều này rất hữu ích nếu các lớp chỉ được sử dụng nội bộ bởi lớp công khai. Ngoài ra, lớp công khai cũng có thể chứa các lớp bên trong.
Mặc dù có một hoặc nhiều lớp riêng tư trong một tệp nguồn duy nhất là tốt, nhưng tôi muốn nói rằng sẽ dễ đọc hơn nếu sử dụng các lớp bên trong và ẩn danh. Ví dụ, người ta có thể sử dụng một lớp ẩn danh để xác định một lớp So sánh bên trong một lớp công khai:
public static Comparator MyComparator = new Comparator() {
public int compare(Object obj, Object anotherObj) {
}
};
Lớp Comparator thường sẽ yêu cầu một tệp riêng biệt để được công khai. Bằng cách này, nó được đóng gói với lớp sử dụng nó.
Tệp .java được gọi là đơn vị biên dịch. Mỗi đơn vị biên dịch có thể chứa bất kỳ số lượng các lớp và giao diện cấp cao nhất nào. Nếu không có các kiểu cấp cao nhất công khai thì đơn vị biên dịch có thể được đặt tên là bất kỳ thứ gì.
//Multiple.java
//preceding package and import statements
class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...
Chỉ có thể có một lớp / giao diện công khai trong một đơn vị biên dịch. Cu phải được đặt tên chính xác như loại cấp cao nhất công khai này.
//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces
Những điểm quan trọng về phương pháp chính - phần 1
(Các điểm liên quan đến số lượng lớp học và mức độ truy cập của chúng được đề cập trong phần 2)
Bên cạnh các lớp bên trong ẩn danh, một cách sử dụng khác là các lớp bên trong riêng tư triển khai giao diện công khai ( xem bài viết này ). Lớp bên ngoài có thể truy cập tất cả các trường và phương thức private của lớp bên trong.
Điều này cho phép bạn tạo hai lớp kết hợp chặt chẽ, chẳng hạn như một mô hình và chế độ xem của nó, mà không để lộ các triển khai của cả hai. Một ví dụ khác là một tập hợp và các trình vòng lặp của nó.
Nói chung, nên có một lớp cho mỗi tệp. Nếu bạn sắp xếp mọi thứ theo cách đó, thì khi bạn tìm kiếm một lớp, bạn biết bạn chỉ cần tìm kiếm tệp có tên đó.
Ngoại lệ là khi một lớp được triển khai tốt nhất bằng cách sử dụng một hoặc nhiều lớp trợ giúp nhỏ. Thông thường, mã dễ theo dõi nhất khi các lớp đó có trong cùng một tệp. Ví dụ: bạn có thể cần một lớp trình bao bọc 'tuple' nhỏ để chuyển một số dữ liệu giữa các cuộc gọi phương thức. Một ví dụ khác là các lớp 'nhiệm vụ' triển khai Runnable hoặc Callable. Chúng có thể quá nhỏ nên được kết hợp tốt nhất với lớp cha tạo và gọi chúng.
Có 200% ,
Thí dụ:
class A {
void methodDeclaration() { System.out.println("!!!"); }
}
class B {
public static void main(String[] args) {
new A().methodDeclaration();
}
}
Có, nó có thể, nhưng chỉ có thể có 1 lớp công khai bên trong bất kỳ gói nào vì trình biên dịch java tạo tệp .Class có cùng tên với tên lớp Công khai, do đó nếu chúng có nhiều hơn 1 lớp công khai thì sẽ khó chọn trình biên dịch đó phải là tên của tệp Lớp.
Thay đổi ... Một ví dụ như vậy sẽ là một lớp ẩn danh (bạn sẽ gặp phải rất nhiều điều đó khi sử dụng trình nghe sự kiện và những thứ đó).
Tôi nghĩ rằng nó phải là "chỉ có thể có một lớp công khai cấp cao nhất NON-STATIC cho mỗi tệp .java". Phải không?
Nếu bạn muốn triển khai một singleton, đó là một lớp chạy trong chương trình của bạn với chỉ một thể hiện trong bộ nhớ trong suốt quá trình thực thi ứng dụng, thì một trong những cách để triển khai một singleton là lồng một lớp tĩnh riêng bên trong một lớp công khai . Sau đó, lớp private bên trong chỉ khởi tạo chính nó khi phương thức public của nó để truy cập cá thể private được gọi.
Kiểm tra bài viết wiki này,
https://en.wikipedia.org/wiki/Singleton_pattern
Khái niệm này cần một thời gian để nhai lại.
Trong tệp .java, chỉ có thể có một lớp cấp cao nhất công khai có tên giống với tệp, nhưng có thể có một số lớp bên trong công khai có thể được xuất cho mọi người và truy cập vào các trường / phương thức của lớp bên ngoài, chẳng hạn : AlertDialog.Builder (được sửa đổi bởi 'public static') trong AlertDialog (được sửa đổi bởi 'public')
Có Bạn có thể có nhiều hơn một Lớp trong một tệp .Java. Nhưng Bạn đã đặt một trong số chúng ở chế độ Công khai. và lưu tệp .java có cùng tên với tên của lớp công khai. khi bạn sẽ biên dịch tệp .java đó, bạn sẽ nhận được các tệp .class riêng biệt cho mỗi lớp được xác định trong tệp .java.
Ngoài ra, có quá nhiều phương pháp để xác định nhiều hơn một lớp trong một tệp .java.
Đúng ! Tệp .java chỉ có thể chứa một lớp công khai.
Nếu bạn muốn công khai hai lớp này, chúng phải được đặt vào hai tệp .java: A.java và B.java.
Có, bạn có thể có nhiều lớp bên trong tệp .java. Nhiều nhất một trong số chúng có thể được công khai. Những người khác là gói-riêng tư. Chúng KHÔNG THỂ được riêng tư hoặc được bảo vệ. Nếu một tệp là công khai, tệp phải có tên của lớp đó. Nếu không, BẤT KỲ ĐIỀU GÌ có thể được đặt cho tệp đó như tên của nó.
Có nhiều lớp bên trong một tệp có nghĩa là các lớp đó nằm trong cùng một gói. Vì vậy, bất kỳ lớp nào khác bên trong gói đó nhưng không có trong tệp đó cũng có thể sử dụng các lớp đó. Hơn nữa, khi gói đó được nhập, lớp nhập cũng có thể sử dụng chúng.
Để có một cuộc điều tra chi tiết hơn, bạn có thể truy cập bài đăng trên blog của tôi tại đây .
Chỉ có thể có một lớp công khai cấp cao nhất trong một tệp. Tên lớp của lớp công khai đó phải là tên của tệp. Nó có thể có nhiều lớp bên trong công khai.
Bạn có thể có nhiều lớp trong một tệp duy nhất. Các giới hạn cho các mức độ hiển thị lớp khác nhau trong một tệp như sau:
Các lớp cấp cao nhất:
1 lớp công khai
0 lớp riêng tư
bất kỳ số lớp mặc định / được bảo vệ
Các lớp bên trong:
bất kỳ số lượng lớp bên trong nào có bất kỳ khả năng hiển thị nào (mặc định, riêng tư, được bảo vệ, công khai)
Xin vui lòng sửa cho tôi nếu tôi sai.
Có, nó có thể. Tuy nhiên, chỉ có thể có một lớp công khai trên mỗi tệp .java, vì các lớp công khai phải có cùng tên với tệp nguồn.