2015-09-25 2 views
0

Я понимаю, что Внутренний класс нестатический и статический метод из Внешнего класса не может ссылаться на него.Внешние и внутренние классы и статические методы

У меня есть этот код, который не работает, и я понимаю, почему это не работает.

class OuterClass { 
    class InnerClass{} 
    public static void outherMethod() { 
     InnerClass i = new InnerClass(); 
    } 
} 

Но тогда у меня есть этот другой код, который делает работу, но я не понимаю, почему он отличается от первого. Почему это работает?

class OuterClass { 
    class InnerClass{} 
    public static void outherMethod() { 
     InnerClass i = new OuterClass.new InnerClass(); 
    } 
} 

Заранее благодарен!

EDIT: это не дублируется, потому что это не тот же вопрос. Я не спрашиваю о статических вложенных классах, я спрашиваю о статических методах и внутренних классах.

ответ

6

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

Статический метод OuterClass не экземпляр OuterClass, так что вы не можете создать экземпляр InnerClass без подвода охватывающую экземпляра (из OuterClass).

InnerClass i = new InnerClass(); 

будет работать только в пределах метода экземпляра OuterClass.

InnerClass i = new OuterClass().new InnerClass(); 

работает в рамках статического метода, поскольку вы создаете экземпляр OuterClass и использовать его в качестве ограждающего экземпляра для экземпляра InnerClass.

3

Ключевой момент, который следует учитывать здесь, - это класс Inner является членом класса Outer.

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

От docs непосредственно

Экземпляр InnerClass может существовать только внутри экземпляра OuterClass и имеет прямой доступ к методам и полям его охватывающему экземпляра.

Чтобы создать экземпляр внутреннего класса, вы должны сначала создать экземпляр внешнего класса. Затем создайте внутренний объект в пределах внешнего объекта с этим синтаксисом:

OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 
Смежные вопросы