2012-03-27 2 views
1

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

Заранее спасибо.

+3

Вы пробовали ? –

ответ

8

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

class Alpha 
{ 
     class Beta () { } 
} 

class Gamma extends Alpha . Beta 
{ 
     // important to get the constructor right or else the whole thing fails 
     Gamma (Alpha alpha) 
     { 
      alpha . super () ; 
     } 
} 

Вы также можете расширить внутренний класс внутри исходного заключающего класса

class OuterParent 
{ 
    class InnerParent { } 

    class InnerChild1 extends OuterParent { } 
} 

или расширить исходный класс ограждающего и расширить внутренний класс в дочернем классе

class OuterChild extends OuterParent 
{ 
    class InnerChild2 extends OuterParent { } 
} 
+1

Возможно. Сумасшедшие конструкторы. Наверное, это не должно быть сделано, но может быть сделано. –

+0

Вау! Я попробовал, и это сработало, но вы правы - это не должно быть сделано. – emory

+0

Спасибо! Моя проблема была связана с конструктором. Это именно то, что мне нужно. – klyngbaek

3

Да, это возможно. Он будет иметь доступ к членам охватывающего класса.

+0

Не могли бы вы привести пример? Если у вас есть 'Outer',' Outer.Inner' и 'DerivedFromInner', я не вижу доступа к членам' Outer' из 'DerivedFromInner' через наследование. – kd8azz

+0

@ Ryan Вы пробовали? Первые два примера в ответе Эмори позволяют это. – trutheality

+0

@ правдивость Действительно, у меня есть. Если вы добавите 'protected int a'' в Alpha и попытаетесь получить к нему доступ с помощью' Alpha.this.a' в Gamma, вы получите «Нет экземпляра экземпляра типа Alpha, доступного в области видимости». Возможно, я обращаюсь к нему неправильно. – kd8azz

Смежные вопросы