我从以下代码中得到了这个构造函数未定义的错误:
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());
}
}
谁能解释我为什么会出现这样的错误?我相信我已经在学生班上完成了结构定义
The constructor Constructor.Student() is undefined
at arrayClassObject.Constructor.main(Constructor.java:18)
当您有一个非静态内部类时,只有在存在封闭类的实例时才能创建实例。 因此,在不更改上述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());
您将Student
定义为封闭类Constructor
的嵌套内部类。 由于Student
是非静态的,因此它只能与Constructor
的关联实例一起存在。
有关嵌套类的更多信息,请参见嵌套类(>学习 Java 语言>类和对象的 Java™ 教程(。
有多种方法可以解决此问题。
使
Student
静态。这样,您就不需要Constructor
实例即可创建Student
。Student
保留非静态内部类。然后,首先需要构造一个Constructor
实例,以便与Student
相关联。(new Constructor().new Student()
(将
Student
移动到其自己的文件。可能没有必要将Student
作为内部类。所以只要把它变成一个普通的课。