Определение классов в файлах Java - PullRequest
4 голосов
/ 22 января 2009

Я обнаружил одну ошибку в моей Java-программе:

Открытый класс abc должен быть определен в своем собственном классе

Как я могу устранить эту ошибку? Я использую Eclipse. Я новичок в программировании на Java.

Ответы [ 5 ]

9 голосов
/ 22 января 2009

Каждый исходный файл должен содержать только один класс public . Класс с именем ClassName должен находиться в файле с именем ClassName.java, и в нем должен быть определен только этот класс.

Исключением являются анонимные и внутренние классы, но если вы понимаете, что вы новичок в Java, это сложная тема. Пока держите один класс на файл.

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

6 голосов
/ 23 января 2009

Хорошо, может быть, пример поможет.

В файле MySuperClass.java:

public class MySuperClass {
    // whatever goes here
}
public class MySubClass1 extends MySuperClass {
    // compile error: public class MySubClass1 should be in MySubClass1.java
}
class MySubClass2 extends MySuperClass {
    // no problem (non-public class does not have to be in a file of the same name)
}

В файле MySubClass3.java:

public class MySubClass3 extends MySuperClass {
    // no problem (public class in file of the same name)
}

Это проясняет ситуацию?

6 голосов
/ 22 января 2009

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

Из спецификации языка , раздел 7.6 :


Когда пакеты хранятся в файловой системе (§7.2.1), хост-система может выбрать ограничение, что это ошибка времени компиляции, если тип не найден в файле под именем, состоящим из введите имя и расширение (например, .java или .jav), если выполняется одно из следующих условий:

  • На тип ссылается код в других единицах компиляции пакета, в котором объявлен тип.

  • Тип объявлен как открытый (и поэтому потенциально доступен из кода в других пакетах).


Это правило, которое не имеет , которому должны следовать компиляторы, в целом соблюдается.

5 голосов
/ 22 января 2009

Открытый класс с именем «abc» должен находиться в файле с именем abc.java

1 голос
/ 23 января 2009

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

Создать один файл на класс. Eclipse сделает это за вас, если вы создадите новый класс.

Для программирования на Java вы должны понимать конструкцию классов, пакетов и файлов. Даже если Eclipse поможет вам, вы должны знать это сами. Так что начинайте читать книги или учебники по Java!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...