2015-05-31 5 views
0
class Outer 
{ 
    int x=10; 
    class Inner 
    { 
     void show() 
     { 
      System.out.println(x); 
     } 
    } 
    public static void main(String args[]) 
    { 
     Outer obj=new Outer(); 
     Inner obj1=new Outer().new Inner(); 
     obj1.show(); 
    } 
} 

Я попытался создать нестатический вложенный класс и попытался использовать нестатический элемент данных внешнего класса в нестационарном внутреннем классе. Я не понял, что если x не статично, как я использую его без объекта. Пожалуйста, дайте мне ответ?Использование нестатического элемента данных в нестационарном вложенном классе с использованием объекта

+0

Это не совсем понятно из вашего вопроса, в чем проблема. Не могли бы вы пояснить, пожалуйста? –

+0

Знаете ли вы, что такое внутренний класс? –

+0

Мой вопрос прост, что если x не статично, то как я могу использовать его без какого-либо объекта. –

ответ

1

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

+0

Но я прочитал, что внутренние классы не имеют отношения к внешнему, так как у них есть ссылка Outer class –

+0

Вложенные классы этого не делают. –

+0

@SotiriosDelimanolis Static вложенные нет. Внутренний (нестатический вложенный). – chrylis

1

Внутренний класс - это просто синтаксический сахар, который имеет неявную ссылку на внешний класс. Внутренне (после JAVAC компиляции) ваш класс Inner выглядит следующим образом:

static class Inner 
{ 
    private final Outer this$0; 

    public Inner(Outer outer) { 
     this$0 = outer; 
    } 

    void show() 
    { 
     System.out.println(this$0.x); 
    } 
} 

И когда вы пишете Inner obj1=new Outer().new Inner(); компилятор изменяет его на что-то вроде Inner obj1=new Inner(new Outer());.

+0

Thanx !!! Получил мой ответ –