2013-07-09 3 views
0

я следующий код:Ошибка компиляции с внутренним классом

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 
    } 
} 

Пожалуйста, объясните мне, спасибо за вашу помощь

+3

Вы имеете в виду либо «статический член из нестатического контекста», либо «нестатический член из статического контекста»? – hexafraction

+0

Это полный код? – kosa

+0

@Nambari выглядит так, и его неправильный = \ –

ответ

1
class Student extends Person{} 

объявлена ​​без static поэтому мы должны иметь экземпляр Person первой ,

Когда мы находимся в main, мы находимся в статическом контексте и не имеем экземпляра Person.

Вы должны переместить Student класс в файл новый называется Student.java и на самом деле убедиться, что при расширении его на самом деле что-то делает.

После этого вы можете получить экземпляр его, не беспокоясь о внутренних типах и вложенных классах.

Вложенные классы используются, когда одному классу требуется, чтобы он был дочерним по отношению к экземпляру другого класса. См. this tutorial.

В противном случае (и в большинстве случаев), классы всегда идти в своих собственных файлах.

1

Внутренние классы должны иметь экземпляр окружающего класса при его создании.

public class Person{ 
    class Student extends Person{} 
    public static void main(String[]){ 
     Person p = new Person().new Student(); 
    } 
} 
Смежные вопросы