Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Много классов в одном файле 
:(
    Опции темы
Reptor
Дата 26.7.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Подскажите как мне в одном файле сделать несколько классов? ведь имя файла должно совпадать с именем класса. 
PM MAIL ICQ   Вверх
math64
Дата 26.7.2007, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Имя одного класса дложно совпадать с именем файла, а другие классы объявить внутри него (вложенные классы). Но class-файлов после компиляции будет столько, сколько было классов.

PM   Вверх
Shaggie
Дата 26.7.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 4
Всего: 72



Цитата(Reptor @  26.7.2007,  14:02 Найти цитируемый пост)
ведь имя файла должно совпадать с именем класса.  

Это когда класс объявлен как public. Иначе никаких проблем!
Пример файла Server.java
Код

public class Server {

...

}

class ServerThread extends Thread {

...

}


Добавлено через 34 секунды
да, так буден создано несколько .class файлов из одного .java


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Reptor
Дата 26.7.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1213
Регистрация: 29.12.2004

Репутация: нет
Всего: 0



Цитата

 Но class-файлов после компиляции будет столько, сколько было классов.


Ну в этом ведь нечего страшного нет?

Цитата

Это когда класс объявлен как public.


Тоесть если я зделаю так 
Код


class Panel1 extends JPanel {    
...    
}

class Panel2 extends JPanel {    
...    
}


то я файл могу назвать как угодно?

PM MAIL ICQ   Вверх
LSD
Дата 26.7.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Reptor @  26.7.2007,  14:18 Найти цитируемый пост)
то я файл могу назвать как угодно?

Да. Но эти классы будут доступны только внутри твоего package-а.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
chand0s
Дата 26.7.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 19.2.2007

Репутация: 1
Всего: 3



Цитата(Reptor @  26.7.2007,  14:18 Найти цитируемый пост)
то я файл могу назвать как угодно?

Нет. В файле обязательно должен быть ОДИН public класс, имя которого должно совпадать с именем файла и сколько угодно классов с доступом по-умолчанию, то есть - без модификаторов.

Добавлено @ 14:32
Цитата(LSD @ 26.7.2007,  12:20)

Да. Но эти классы будут доступны только внутри твоего package-а.

Ваша правда.
Сейчас проверил - действительно допускается иметь файл без public класса.
Спасибо.

Это сообщение отредактировал(а) chand0s - 26.7.2007, 14:32
PM MAIL   Вверх
math64
Дата 26.7.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



В одном java-файле можно разместить несколько обычных классов, но пользоваться этой возможностью не следует (только если выделить пример из форума, вставить в  один файл и откомпилировать). Иначе если удалить все class-файлы и запустить javac *.java, можно получить ошибку компиляции "нет такого класса" при неправильном порядке компиляции.
Эта возможность была введена в java 1.0 когда не было вложенных классов. Теперь нужно использовать вложенные классы,

PM   Вверх
Samotnik
Дата 27.7.2007, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Главное, чтобы файл имел такое же имя как класс(где есть Main()), а остальные классы можно называть как угодно
PM MAIL   Вверх
Platon
Дата 27.7.2007, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Цитата(Samotnik @  27.7.2007,  02:22 Найти цитируемый пост)
Главное, чтобы файл имел такое же имя как класс(где есть Main()), а остальные классы можно называть как угодно

Че-то впервые такую мульку слышу. У меня 99% классов, которые совпадают с именем файла, при этом не имеют мэйна, и ничего. НЕ НАДО вводить в заблуждение.
PM MAIL ICQ   Вверх
math64
Дата 27.7.2007, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Если у вас есть файл 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.

PM   Вверх
LSD
Дата 27.7.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Классы верхнего уровня могут иметь или модификатор public, или модификатор по умолчанию, внутренние классы могут иметь любой модификатор доступа. Классы верхнего уровня, должны быть объявлены в файле имя которого совпадает с именем класса.
Метод public static void main(String[] args) может содержать любой класс, даже приватный:
Код
public class Outer
{
  private static class Inner
  {
    public static void main(String[] args)
    {
      System.out.println("Hello World!");
    }
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 27.7.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(Platon @  27.7.2007,  06:03 Найти цитируемый пост)
Че-то впервые такую мульку слышу. У меня 99% классов, которые совпадают с именем файла, при этом не имеют мэйна, и ничего. НЕ НАДО вводить в заблуждение.

Прошу прощение, за не допонимание, имелось в виду, что в Java имя исходного файла, должно совпадать с названием класса. 
В Java исходный файл называют единицей компиляции Это текстовый файл, который содержит одно или несколько определений классов. Компилятор требует, чтобы исходный файл использовал расширение .java. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0577 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.