Відповіді:
Так, це може. Однак на файл може бути лише один загальнодоступний клас вищого рівня.java
, і загальнодоступні класи вищого рівня повинні мати те саме ім’я, що і вихідний файл.
Метою включення декількох класів у один вихідний файл є поєднання функціональних можливостей підтримки (внутрішніх структур даних, класів підтримки тощо) разом з основним відкритим класом. Зауважте, що це завжди добре, не робити цього - єдиний ефект полягає в читанні (чи ні) вашого коду.
java.awt.LightweightDispatcher
?
Якщо ви хочете реалізувати загальнодоступний клас, його потрібно реалізувати у файлі з тим самим іменем, що і цей клас. Один файл може містити один загальнодоступний і необов'язково деякі приватні класи. Це корисно, якщо класи використовуються лише внутрішнім суспільним класом. Крім того, громадський клас також може містити внутрішні класи.
Хоча цілком добре мати один або кілька приватних класів у одному вихідному файлі, я б сказав, що зручніше використовувати внутрішні та анонімні класи. Наприклад, можна використовувати анонімний клас для визначення класу Comparator всередині публічного класу:
public static Comparator MyComparator = new Comparator() {
public int compare(Object obj, Object anotherObj) {
}
};
Класу Comparator зазвичай потрібен окремий файл для публічного доступу. Таким чином він поєднується з класом, який його використовує.
Файл .java називається одиницею компіляції. Кожна компіляційна одиниця може містити будь-яку кількість класів та інтерфейсів вищого рівня. Якщо немає загальнодоступних типів верхнього рівня, то одиницю компіляції можна назвати чим завгодно.
//Multiple.java
//preceding package and import statements
class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...
У блоці компіляції може бути лише один публічний клас / інтерфейс. Куб повинен бути названий точно так, як цей загальнодоступний тип вищого рівня.
//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces
Важливі моменти щодо основного методу - частина 1
(Бали щодо кількості класів та рівнів їх доступу, розглянутих у частині 2)
Крім анонімних внутрішніх класів, іншим використанням є приватні внутрішні класи, які реалізують публічний інтерфейс ( див. Цю статтю ). Зовнішній клас може отримати доступ до всіх приватних полів та методів внутрішнього класу.
Це дозволяє створювати два щільно зв'язані класи, такі як модель та її перегляд, не піддаючи реалізацію жодного з них. Ще один приклад - колекція та її ітератори.
Взагалі має бути один клас на файл. Якщо ви організовуєте такі речі таким чином, тоді, коли ви шукаєте клас, ви знаєте, що вам потрібно лише шукати файл з таким ім’ям.
Виняток становить, коли клас найкраще реалізувати за допомогою одного або декількох невеликих допоміжних класів. Зазвичай коду найлегше дотримуватися, коли ці класи присутні в одному файлі. Наприклад, вам може знадобитися невеликий клас обгортки "кортеж" для передачі деяких даних між викликами методів. Іншим прикладом є класи 'завдання', що реалізують Runnable або Callable. Вони можуть бути настільки маленькими, що їх найкраще поєднувати з батьківським класом, який створює та викликає їх.
Так, 200% ,
Приклад:
class A {
void methodDeclaration() { System.out.println("!!!"); }
}
class B {
public static void main(String[] args) {
new A().methodDeclaration();
}
}
Так, це може бути, але всередині будь-якого пакету може бути лише 1 публічний клас, оскільки компілятор java створює файл .Class, який має те саме ім’я, що і загальнодоступний клас, тому, якщо їх більше 1 публічного класу, було б важко вибрати для компілятор, що має бути ім'ям файлу класу.
Різноманітний ... Одним із таких прикладів можуть бути анонімні класи (ви будете стикатися з тими, коли користуєтеся слухачами подій і подібними).
Я думаю, що це повинно бути "може бути лише один публічний клас вищого рівня NON-STATIC на .java файл". Чи не так?
Якщо ви хочете реалізувати синглтон, тобто клас, який працює у вашій програмі із лише одним екземпляром пам’яті протягом усього виконання програми, то одним із способів реалізації синглтона є гніздування приватного статичного класу всередині загальнодоступного класу . Тоді внутрішній приватний клас інстанціює себе лише тоді, коли викликається його публічний метод доступу до приватного примірника.
Перегляньте цю статтю у вікі,
https://en.wikipedia.org/wiki/Singleton_pattern
Концепція потребує певного часу, щоб жувати.
У файлі .java може бути лише один загальнодоступний клас верхнього рівня, ім'я якого збігається з файлом, але може бути декілька загальнодоступних внутрішніх класів, які можна експортувати для всіх і отримати доступ до полів / методів зовнішнього класу, наприклад : AlertDialog.Builder (модифіковано "public static") в AlertDialog (модифіковано "public")
Так, Ви можете мати більше класу в одному файлі .Java. Але ви зробили одну з них загальнодоступною. і збережіть .java файл з тим самим ім'ям, як ім'я публічного класу. коли ви складете цей .java-файл, ви отримаєте окремі файли .class для кожного класу, визначеного у .java-файлі.
Крім цього, існує занадто багато методів визначення більше одного класу в одному .java-файлі.
Так ! .java-файл може містити лише один загальнодоступний клас.
Якщо ви хочете, щоб ці два класи були загальнодоступними, їх потрібно помістити у два .java-файли: A.java та B.java.
Так, ви можете мати декілька класів у файлі .java. Принаймні, одна з них може бути публічною. Інші пакетно-приватні. Вони НЕ можуть бути приватними або захищеними. Якщо він є загальнодоступним, у файлі повинно бути назва цього класу. Інакше цьому файлу як імені може бути надано будь-що.
Наявність у одному файлі багатьох класів означає, що ці класи знаходяться в одному пакеті. Тому будь-які інші класи, які знаходяться всередині цього пакету, але не у цьому файлі, також можуть використовувати ці класи. Крім того, коли цей пакет імпортується, клас імпорту може також використовувати їх.
Для більш детального розслідування ви можете відвідати мою публікацію в блозі тут .
У файлі може бути лише один клас вищого рівня публічного класу . Ім'я класу цього публічного класу має бути ім'ям файлу. У ньому може бути багато громадських внутрішніх класів.
Ви можете мати багато класів в одному файлі. Обмеження для різних рівнів видимості класу у файлі такі:
Класи вищого рівня:
1 публічний клас
0 приватний клас
будь-яка кількість класів за замовчуванням / захищеними
Внутрішні класи:
будь-яка кількість внутрішніх класів із будь-якою видимістю (за замовчуванням, приватні, захищені, загальнодоступні)
Будь ласка, виправте мене, якщо я помиляюся.
Так, це може. Однак у файлі .java може бути лише один публічний клас, оскільки публічні класи повинні мати те саме ім'я, що і вихідний файл.