Ответ 1
Возможно наличие одного класса внутри другого класса. В Java он называется внутренний класс
По-прежнему из С++ я нахожу громоздким создание множества небольших вспомогательных классов и объектов. В основном, потому что у меня должен быть один файл для каждого класса. У меня в основном такой класс:
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 является строго одним классом для каждого файла и что он, язык?
Возможно наличие одного класса внутри другого класса. В Java он называется внутренний класс
Вы можете иметь несколько классов в одном файле, но только один из них может быть общедоступным:
Как уже отмечалось несколькими другими, вы можете иметь любое количество непубличных классов в одном файле.
Чтобы ответить на вопрос "почему", одним из вероятных факторов является то, что он упрощает поиск ваших классов. Если я вижу ссылку в программе для класса Foobar, я сразу же знаю, что она должна либо находиться в том же файле с текущим классом, либо должна находиться в файле с именем Foobar.java. Я могу проверить импорт, чтобы узнать, в каком каталоге он находится.
Когда я работаю над программами на C или С++, я регулярно нахожусь в поиске файлов Windows или Linux grep, чтобы найти источник для класса.
Когда я пишу очень маленькие программы, я часто помещаю все классы в один файл. Но если это будет больше, чем несколько тысяч строк, гораздо более легко справиться с этим.
Когда у меня есть класс, который используется только одним другим классом, я часто помещаю его в один и тот же файл. Обычно это означает класс, который существует только для временного хранения небольшого пакета данных, например, мне нужен массив или список чего-то, что требует более одного поля.
Ограничение состоит в том, что вы можете иметь только один открытый класс верхнего уровня для каждого файла (хотя вы можете иметь вложенные публичные классы). Как уже упоминалось, у вас могут быть внутренние/вложенные классы внутри этого класса.
Еще одна вещь, о которой не упоминалось, заключается в том, что вы можете иметь еще один класс верхнего уровня в том же файле, если он является закрытым пакетом (видимым только внутри пакета). Пакет-частный класс - это класс, объявленный без модификатора доступа.
Вот глава из Эффективной 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
Это правило является одним общедоступным классом верхнего уровня для каждого файла. Внутренний класс, частный класс и некоторые другие вещи разрешены
Java позволяет создавать внутренние классы. То есть, классы внутри другого класса. То, где вы должны поместить свои вспомогательные классы. С другой стороны, я чувствую вашу боль. Будучи в первую очередь С++-кодером, Java может иногда чувствовать, что он накладывает на вас шаблон.
Да, вы можете вставить класс внутри другого.
Вопреки многим ответам здесь нет ограничений на общественную видимость.
Вложенные классы включают:
Более подробная информация доступна в этом учебнике Oracle.
В Java нет способа разместить два общедоступных класса верхнего уровня в один и тот же файл, но это ограничение не распространяется на частные/внутренние классы. Таким образом, вы можете иметь что-то вроде:
public class MyNotSoSimpleClass {
private MySimpleClass mySimpleClass = new MySimpleClass();
private class MySimpleClass {
public float numbers[4];
...
}
....
}
В Java есть что-то называемое вложенными классами, читайте об этом здесь!