2013-05-03 4 views
0

Я знаю различия между статическим вложенным классом и внутренним классом в Java. Я говорю о внутреннем классе. Я также знаю, что мы можем использовать «OuterClass.this», чтобы получить внешний класс из внутреннего класса.Java: Как получить непосредственного родителя (который не является классом верхнего уровня) из внутреннего класса?

Как и в каталоге, существует два способа навигации: абсолютный и относительный. Например: «/ aaa/bbb/ccc/ddd», если я внутри папки «ccc» и хочу ссылаться на «bbb», мы можем: «cd/aaa/bbb» или «cd ..» ,

Теперь идет к внутренним классам Java.

class AAA{ 
    BBB b = new BBB(); 
    class BBB{ 
     CCC c = new CCC(); 
     //CCC c = new CCC(b); 
     class CCC{ 
      //SECOND VERSION 
      //BBB parent = null 
      //CCC(BBB parent_){ 
      // parent = parent_; 
      //} 
      DDD d = new DDD(); 
      BBB GetParent(){ 
       return AAA.this.b; //I know this will work 
       //or return parent; if using the SECOND VERSION 
      } 
      class DDD{ 
      }  
     } 
    } 
} 

я предоставил две версии: AAA.this.b и ввести переменную-член «родительский», назначенный со значением параметра из конструктора.

Мой вопрос: Если я не вводим переменную-член, могу ли я использовать относительный способ получения ее непосредственного родителя из внутреннего класса? (например, cd ..)

+0

Как AAA.this.b является «родителем»? Непонятно, о чем вы просите? Обе версии возвращают произвольный экземпляр класса BBB, а не тот, который содержит объект DDD с методом GetParent. Так что, похоже, третья версия будет «возвращать новый BBB();' – emory

+0

Спасибо. Но я не могу согласиться. Я думал, что этот сценарий ясен. Если у вас есть экземпляр AAA, скажите «a», тогда у вас будут: a, a.b, a.b.c, a.b.c.d; У вас будет 4 экземпляра, собранных во вложенном порядке. – milesma

+1

Не работает ли BBB.this? – flup

ответ

2

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

0

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