Почему только один класс в файле

По-прежнему из С++ я нахожу громоздким создание множества небольших вспомогательных классов и объектов. В основном, потому что у меня должен быть один файл для каждого класса. У меня в основном такой класс:

public class mySimpleClass {
    public float[] numbers = new float[ 4 ];
}

И тогда у меня есть этот класс:

public class myNotSoSimpleClass {
    private mySimpleClass;
    .
    .
    .
}

Второй класс, который не так прост, имеет смысл в собственном файле. Тем не менее, простой класс связан с не очень простым классом, и было бы очень неплохо не иметь эти несколько строк кода в собственном файле.

Итак, чтобы подвести итог, это то, что можно было бы сделать в С++:

public class myNotSoSimpleClass {
    private struct mySimpleClass {
        float numbers[ 4 ];
    } myStruct;
    .
    .
    .
}

Возможно ли внедрить/использовать один класс внутри другого класса или тот же файл? Мне просто было бы легче работать с большими проектами, если бы я мог настроить эти два класса в один файл. Или Java является строго одним классом для каждого файла и что он, язык?

Ответы

Ответ 1

Возможно наличие одного класса внутри другого класса. В Java он называется внутренний класс

Ответ 3

Как уже отмечалось несколькими другими, вы можете иметь любое количество непубличных классов в одном файле.

Чтобы ответить на вопрос "почему", одним из вероятных факторов является то, что он упрощает поиск ваших классов. Если я вижу ссылку в программе для класса Foobar, я сразу же знаю, что она должна либо находиться в том же файле с текущим классом, либо должна находиться в файле с именем Foobar.java. Я могу проверить импорт, чтобы узнать, в каком каталоге он находится.

Когда я работаю над программами на C или С++, я регулярно нахожусь в поиске файлов Windows или Linux grep, чтобы найти источник для класса.

Когда я пишу очень маленькие программы, я часто помещаю все классы в один файл. Но если это будет больше, чем несколько тысяч строк, гораздо более легко справиться с этим.

Когда у меня есть класс, который используется только одним другим классом, я часто помещаю его в один и тот же файл. Обычно это означает класс, который существует только для временного хранения небольшого пакета данных, например, мне нужен массив или список чего-то, что требует более одного поля.

Ответ 4

Ограничение состоит в том, что вы можете иметь только один открытый класс верхнего уровня для каждого файла (хотя вы можете иметь вложенные публичные классы). Как уже упоминалось, у вас могут быть внутренние/вложенные классы внутри этого класса.

Еще одна вещь, о которой не упоминалось, заключается в том, что вы можете иметь еще один класс верхнего уровня в том же файле, если он является закрытым пакетом (видимым только внутри пакета). Пакет-частный класс - это класс, объявленный без модификатора доступа.

Вот глава из Эффективной Java (которая стоит прочитать) по этому вопросу. http://books.google.co.uk/books?id=ka2VUBqHiWkC&lpg=PA67&ots=yXKoLnv2TX&dq=Minimize%20the%20accessibility%20of%20classes%20and%20members&pg=PA67#v=onepage&q&f=false

Ответ 5

Это правило является одним общедоступным классом верхнего уровня для каждого файла. Внутренний класс, частный класс и некоторые другие вещи разрешены

Ответ 6

Java позволяет создавать внутренние классы. То есть, классы внутри другого класса. То, где вы должны поместить свои вспомогательные классы. С другой стороны, я чувствую вашу боль. Будучи в первую очередь С++-кодером, Java может иногда чувствовать, что он накладывает на вас шаблон.

Ответ 7

Да, вы можете вставить класс внутри другого.

Вопреки многим ответам здесь нет ограничений на общественную видимость.

Вложенные классы включают:

  • Статические вложенные классы.
  • Внутренние классы, которые имеют неявный указатель на экземпляр содержащего класса и имеют доступ к его частным частям.
  • Анонимные внутренние классы, которые могут быть созданы в методах содержащего класса без имени. Это удобно, например, для прослушивателей коротких событий.

Более подробная информация доступна в этом учебнике Oracle.

Ответ 8

В Java нет способа разместить два общедоступных класса верхнего уровня в один и тот же файл, но это ограничение не распространяется на частные/внутренние классы. Таким образом, вы можете иметь что-то вроде:

public class MyNotSoSimpleClass {
    private MySimpleClass mySimpleClass = new MySimpleClass();

    private class MySimpleClass {
        public float numbers[4];
        ...
    }
....

}

Ответ 9

В Java есть что-то называемое вложенными классами, читайте об этом здесь!