Может ли java файл иметь более одного класса?

Какова цель иметь более одного класса в файле Java? Я новичок в Java.

Отредактировано: Это может быть достигнуто путем создания внутреннего класса внутри открытого класса, правильно?

Ответ 1

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

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

Ответ 2

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

Хотя хорошо иметь один или несколько частных классов в одном исходном файле, я бы сказал, что это более читаемо для использования внутренних и анонимных классов. Например, можно использовать анонимный класс для определения класса Comparator внутри открытого класса:

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };

Для класса Comparator обычно требуется отдельный файл, чтобы быть общедоступным. Таким образом, он связан с классом, который его использует.

Ответ 3

Да, сколько угодно!

НО, только один "общедоступный" класс в каждом файле.

Ответ 4

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

//Multiple.java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

В модуле компиляции может быть только один открытый класс/интерфейс. C.u. должен быть назван точно так же, как этот открытый тип верхнего уровня.

//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces

Важные замечания об основном методе - часть 1

Часть 2

(Баллы, касающиеся количества классов и их уровней доступа, рассмотренных в части 2)

Ответ 5

В общем, должен быть один класс для каждого файла. Если вы организуете такие вещи, тогда, когда вы ищете класс, вы знаете, что вам нужно только искать файл с этим именем.

Исключением является то, что класс лучше всего реализуется с использованием одного или нескольких небольших вспомогательных классов. Обычно код проще всего отслеживать, когда эти классы присутствуют в одном файле. Например, для передачи некоторых данных между вызовами метода может потребоваться небольшой класс кортежа 'tuple'. Другим примером являются классы "задачи", реализующие Runnable или Callable. Они могут быть настолько малы, что их лучше всего сочетать с созданием и вызовом родительского класса.

Ответ 6

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

Это позволяет создавать два тесно связанных класса, таких как модель и ее представление, не подвергая их реализации. Другим примером является коллекция и ее итераторы.

Ответ 7

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

public class first {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public class demo1
    {

        public class demo2
        {

        }
    }
}

Ответ 8

Да 200%,

Пример:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }

Ответ 9

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

Ответ 10

Варьируется... Одним из таких примеров может быть анонимные классы (вы будете сталкиваться с ними много, когда используете прослушиватели событий и т.д.).

Ответ 11

Я думаю, что это должно быть "может быть только один НЕ-СТАТИЧЕСКИЙ класс высокого уровня для каждого .java файла". Не правда ли?

Ответ 12

Если вы хотите реализовать одноэлементный, то есть класс, который запускается в вашей программе только с одним экземпляром в памяти на протяжении всего выполнения приложения, тогда один из способов реализации синглета - вставить закрытый статический класс внутри публичный класс. Затем внутренний частный класс создает экземпляр только тогда, когда вызывается его открытый метод доступа к частному экземпляру.

Ознакомьтесь с этой статьей wiki,

https://en.wikipedia.org/wiki/Singleton_pattern

Концепция занимает некоторое время, чтобы пожевать.

Ответ 13

В файле .java может быть только один общедоступный класс верхнего уровня, имя которого совпадает с именем файла, но может быть несколько открытых внутренних классов, которые могут быть экспортированы для всех и получить доступ к внешним классам/методам, например: AlertDialog.Builder (изменено "public static" ) в AlertDialog (изменено "public" )

Ответ 14

Да Вы можете иметь более одного класса в одном .Java файле. Но вы сделали один из них Public. и сохраните файл .java с тем же именем, что и имя открытого класса. когда вы скомпилируете этот .java файл, чем получите отдельные файлы .class для каждого класса, определенного в .java файле.

Кроме того, существует слишком много методов для определения более одного класса в одном .java файле.

  • использовать концепцию внутренних классов.
  • Использовать концепцию анонимных классов.

Ответ 15

Да! .java файл может содержать только один открытый класс.

Если вы хотите, чтобы эти два класса были общедоступными, они должны быть помещены в два .java файла: A.java и B.java.

Ответ 16

Да, вы можете иметь более одного класса внутри .java файла. Большинство из них могут быть общедоступными. Остальные - частные. Они НЕ МОГУТ быть частными или защищенными. Если он является общедоступным, файл должен иметь имя этого класса. В противном случае НИЧЕГО может быть присвоено этому файлу в качестве его имени.

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

Для более подробного расследования вы можете посетить мой пост в блоге здесь.

Ответ 17

В файле может быть только один класс верхнего уровня публичного класса. Имя класса этого открытого класса должно быть именем файла. Он может иметь множество общественных внутренних классов.

У вас может быть много классов в одном файле. Пределы для различных уровней видимости класса в файле:

Классы верхнего уровня:
1 открытый класс
0 частный класс
любое количество классов по умолчанию /protected

Внутренние классы:
любое количество внутренних классов с любой видимостью (по умолчанию, частным, защищенным, общедоступным)

Пожалуйста, поправьте меня, если я ошибаюсь.

Ответ 18

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