в конструкторе отсутствует ошибка, хотя конструктор реализован - PullRequest
0 голосов
/ 20 января 2020

Я получил эту неопределенную конструкторскую ошибку из следующего кода:

package arrayClassObject;

public class Constructor {
    public class Student{
        String name;
        public Student() {

        }
        public Student(String name) {
            this.name = name;
        }
        void setName(String name) { // setter
            this.name = name; 
        }   
        public String getName() { // getter
            return name;
        }

        }   
    public static void main(String[] args) {        
        Student s = new Student();
        s.setName("Jack");
        System.out.println(s.getName());
    }

}

Может кто-нибудь объяснить мне, почему я получил такие ошибки? Мне кажется, я выполнил определение конструкции в классе Student

    The constructor Constructor.Student() is undefined

    at arrayClassObject.Constructor.main(Constructor.java:18)

Ответы [ 2 ]

3 голосов
/ 20 января 2020

Если у вас есть внутренний класс c, не относящийся к состоянию, вы можете создавать его только тогда, когда существует экземпляр окружающего класса. Таким образом, не изменяя class structures выше, вам нужно будет сделать следующее:

Constructor c = new Constructor(); // instance of the enclosing class
Student s = c.new Student();       // special syntax 
s.setName("Jack");
System.out.println(s.getName());
0 голосов
/ 20 января 2020

Вы определили Student как вложенный внутренний класс включающего класса Constructor. Поскольку Student не является статичным c, он может существовать только со связанным экземпляром Constructor.

См. Вложенные классы (Учебные руководства Java ™> Изучение языка Java> Классы и объекты) для получения дополнительной информации о вложенных классах.

Существует несколько способов обойти эту проблему.

  1. Сделать Student stati c. Таким образом, вам не нужен экземпляр Constructor для создания Student.

  2. Сохранение Student не статичного c внутреннего класса. Затем вам сначала нужно создать экземпляр Constructor, чтобы Student был связан с ним. (new Constructor().new Student())

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

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