| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Много классов в одном файле |
| Автор: Reptor 26.7.2007, 13:02 |
| Подскажите как мне в одном файле сделать несколько классов? ведь имя файла должно совпадать с именем класса. |
| Автор: math64 26.7.2007, 13:09 |
| Имя одного класса дложно совпадать с именем файла, а другие классы объявить внутри него (вложенные классы). Но class-файлов после компиляции будет столько, сколько было классов. |
| Автор: Shaggie 26.7.2007, 13:10 | ||
Это когда класс объявлен как public. Иначе никаких проблем! Пример файла Server.java
Добавлено через 34 секунды да, так буден создано несколько .class файлов из одного .java |
| Автор: Reptor 26.7.2007, 13:18 | ||||||
Ну в этом ведь нечего страшного нет?
Тоесть если я зделаю так
то я файл могу назвать как угодно? |
| Автор: LSD 26.7.2007, 14:20 |
Да. Но эти классы будут доступны только внутри твоего package-а. |
| Автор: chand0s 26.7.2007, 14:27 | ||
Нет. В файле обязательно должен быть ОДИН public класс, имя которого должно совпадать с именем файла и сколько угодно классов с доступом по-умолчанию, то есть - без модификаторов. Добавлено @ 14:32
Ваша правда. Сейчас проверил - действительно допускается иметь файл без public класса. Спасибо. |
| Автор: math64 26.7.2007, 15:14 |
| В одном java-файле можно разместить несколько обычных классов, но пользоваться этой возможностью не следует (только если выделить пример из форума, вставить в один файл и откомпилировать). Иначе если удалить все class-файлы и запустить javac *.java, можно получить ошибку компиляции "нет такого класса" при неправильном порядке компиляции. Эта возможность была введена в java 1.0 когда не было вложенных классов. Теперь нужно использовать вложенные классы, |
| Автор: Samotnik 27.7.2007, 02:22 |
| Главное, чтобы файл имел такое же имя как класс(где есть Main()), а остальные классы можно называть как угодно |
| Автор: math64 27.7.2007, 09:55 |
| Если у вас есть файл A.java и в нём [public] class A и class B. Компилируете. Получаете A.class и B.class. OK. Пишете class С, использующий B. Компилируете. Компирятор находит class B в В.class. OK. Добавляете новый метод f() в class B. Вызываете его из class C. Запускаете class C на компиляцию. Компилатор находит старый B.class, не находит на него нового исходника и выдает ошибку "нет метода f() в классе B". Если бы class B находился в B.java, компилятор бы его перекомпилировал. Если [static] class B вложен в класс A, то он компилируется в A$B.class, и компирятор знает, что исходники на него нужно искать в A.java. |
| Автор: LSD 27.7.2007, 11:47 | ||
| Классы верхнего уровня могут иметь или модификатор public, или модификатор по умолчанию, внутренние классы могут иметь любой модификатор доступа. Классы верхнего уровня, должны быть объявлены в файле имя которого совпадает с именем класса. Метод public static void main(String[] args) может содержать любой класс, даже приватный:
|
| Автор: Samotnik 27.7.2007, 23:16 | ||
Прошу прощение, за не допонимание, имелось в виду, что в Java имя исходного файла, должно совпадать с названием класса. В Java исходный файл называют единицей компиляции Это текстовый файл, который содержит одно или несколько определений классов. Компилятор требует, чтобы исходный файл использовал расширение .java. |