Специальные возможности или область действия
С точки зрения области действия, в первом случае мы определяем несколько классов Java (не вложенных классов) в отдельных файлах.
Java позволяет нам определять несколько классов в одном файле, но с одним ограничением только один класс может быть общедоступным.поэтому только один класс может быть доступен вне его пакета, а все остальные будут частными классами пакета.Однако после компиляции каждый класс будет представлен своим собственным .class
файлом, аналогично определению разных файлов.
Во втором случае мы определяем класс Java (MyTask.java
) внутри класса Java(Activity.java
), это известно как внутренние классы (в нашем случае это вложенный класс).
Доступность вложенного класса также работает как метод класса.доступ к нему возможен вне его пакета, если класс является общедоступным, через объект его включающего класса. Однако, если мы хотим получить доступ к методам вложенного класса, нам нужно создать объект этого класса, такой же, как включающий класс.например new Activity().new MyTask().foo()
В третий случай мы определяем каждый класс как отдельные файлы
доступность будет напрямую зависеть от того, какой модификатор доступа мы определили для класса, если классПубличный, тогда он может быть доступен везде во всем проекте.таким образом, вы получите полный контроль над тем, как вы хотите, чтобы ваш класс имел доступ.
Память
С точки зрения память , нет никакой разницывообще
У класса нет памяти, пока не создан объект класса.так что совершенно неважно, где вы определили свой класс.память будет зависеть от количества созданных объектов.
Однако в случае вложенного класса, если мы обращаемся к вложенному классу за пределами его включающего класса, то сначала нам понадобится объект его включающего класса, чтобы охватывающий класс получал память, даже если мы просто хотим получить доступ к вложенному классу..
но если мы обращаемся внутрь, то во всех случаях согласно правилам память останется прежней
Best Practices
, в этих случаях лучшие практики полностью зависятв случае использования
для в первом случае давайте предположим, что у нас теперь есть два class A
и class B
и class A extends B
, если мы знаем, что никогда не будем использовать class B
непосредственно снаружиэто пакет, тогда мы можем определить оба класса в одном и том же файле (не вложенный класс) и сделать class A
нашим открытым классом
, используя этот способ, мы просто сохранили файл, а также время создания файла, но мы такжескомпрометировал удобочитаемость.по моему личному мнению, я создам новый файл, чтобы я мог легко прочитать и проверить свой класс.
во втором случае , если мы знаем, что класс будет использоваться только один раз, например MyTask.java
будет просто использоваться в Activity.java
, тогда мы сможем определить его внутри Acitivty.java
, используя этот подход, мы будем иметь весь код в одном месте, работающий вместе для функциональности.
наш третий случай может использоваться во многих случаях и, как правило, наиболее часто используемым способом.каждый класс в отдельном файле, поэтому позже к каждому классу можно легко получить доступ
для нашего примера, если мы знаем, что MyTask.java
может использоваться более чем одним классом, то мы можем создать его как отдельный файл с открытым доступом.