错误“没有关闭实例......”

时间:2014-04-24 14:22:43

标签: java eclipse class object methods

我是Java的新手,最近我研究 class object 主题。但是,我无法继续使用此代码:

public class ClassStudy {

// Student Group
class Student {

    public String name = null;
    public String surname = null;

    boolean study(boolean does) {
        // He studies.
        boolean d = does;
        return d;
    }
    boolean slackOff(boolean does) {
        // He slacks off.
        boolean d = does;
        return d;
    }
}

// Teacher Group
class Teacher {

    public String name = null;
    public String surname = null;

    boolean teach(boolean does) {
        // He teaches.
        boolean d = does;
        return d;
    }
    boolean learn(boolean does) {
        // He learns.
        boolean d = does;
        return d;
    }
}

// Main Method
public static void main(String[] args) {
    Student student = new Student();
    Teacher teacher = new Teacher();
}

}

在主要方法中,我得到学生的错误,但没有老师。我不知道我是否犯了任何错误或者我看不到它。必须做什么?

我得到的错误:

  
      
  • 不使用局部变量student的值   
        
    • 无法访问ClassStudy类型的封闭实例。必须   使用ClassStudy类型的封闭实例限定分配   (例如x.new A(),其中x是ClassStudy的实例)。
    •   
    • 行断点:ClassStudy [line:44] - main(String [])
    •   
  •   

3 个答案:

答案 0 :(得分:4)

Student(和Teacher)类设为静态或使其成为顶级类

static class Student {
   ...
}

答案 1 :(得分:3)

错误已经说明了问题:

  

无法访问ClassStudy类型的封闭实例。必须符合资格   使用ClassStudy类型的封闭实例进行分配(例如   x.new A()其中x是ClassStudy的实例。)

如果没有周围类的实例,则无法创建内部类的实例,除非它们是静态的。 那么您需要将主要方法更改为:

// Main Method
public static void main(String[] args) {
    ClassStudy classStudy = new ClassStudy();
    Student student = classStudy.new Student();
    Teacher teacher = classStudy.new Teacher();
}

您在初始化Teacher的行上没有得到相同错误的原因是因为编译器在找到的第一个错误时停止编译。

答案 2 :(得分:1)

Reimeus有一个正确的解决方案。要了解消息告诉您的内容,您应该了解静态和非静态内部类。这些应该让你开始。

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Java inner class and static nested class