Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用内部类编译时出错_Java_Oop - Fatal编程技术网

Java 使用内部类编译时出错

Java 使用内部类编译时出错,java,oop,Java,Oop,我有以下代码: public class Person{ class Student extends Person{} public static void main(String[] ){ Person p = new Student(); //error compiling here, can't access non-static member from a static context } } 请给我解释一下,谢谢你的帮助 c

我有以下代码:

public class Person{
    class Student extends Person{}
    public static void main(String[] ){
        Person p = new Student();
        //error compiling here, can't access non-static member from a static context
    }  
}
请给我解释一下,谢谢你的帮助

class Student extends Person{}
声明时不带
static
,因此我们必须首先有一个
Person
的实例

当我们在
main
中时,我们处于静态上下文中,没有Person实例

您应该将
Student
类移动到一个名为
Student.java
的新文件中,并确保在扩展它时确实做了一些事情

然后,您可以尝试获取它的一个实例,而不必担心内部类型和嵌套类

当一个类需要要求它是另一个类实例的子类时,可以使用嵌套类。看


否则(在大多数情况下),类总是进入它们自己的文件中。

内部类在创建时必须给出封闭类的实例

public class Person{
    class Student extends Person{}
    public static void main(String[] ){
        Person p = new Person().new Student();
    }  
}

你的意思是“来自非静态上下文的静态成员”还是“来自静态上下文的非静态成员”?@Nambari看起来很像,但它的错误=\@Hexafrance抱歉,非静态最好准确编译要发布的代码,然后复制粘贴它并将错误消息粘贴到问题中。通常,回答问题的人理解错误信息中的信息,而这些信息对提问者来说似乎毫无意义。@Patricia Shanahan:没错。在某些情况下,我们多次看到编译器错误消息,甚至在没有看到代码的情况下,我们就知道问题所在。