расширение внутреннего класса

В java скажем, у меня есть следующий класс:

public class A{
  protected class B{
  }
}

могу ли я расширить внутренний класс, выполнив следующие действия?

public class C extends A{
  protected class D extends B{
  }
}

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


person user1082160    schedule 26.02.2012    source источник
comment
Да, вы можете расширить внутренний класс таким образом.   -  person Headshota    schedule 27.02.2012


Ответы (4)


Согласно этой странице, у вас есть правильный способ расширения внутренних классов. Несколько советов по этому поводу можно найти здесь, в середине статьи (ищите "продлевать").

person malexmave    schedule 26.02.2012

Если это не сработает (я не думаю, что это сработает), следующее должно:

public class C extends A{
  protected class D extends A.B{
  }
}

Хорошо, так и будет, но что, если у вас есть другой класс с именем B помимо A?

Редактировать: нет, это не имеет значения. Даже если есть другой класс с именем B, он все равно займет A.B. Так что ваш синтаксис правильный.

person Luchian Grigore    schedule 26.02.2012
comment
Это не сработало бы, если бы D было static, но это не так, поэтому работает. - person Jeffrey; 27.02.2012

Вам разрешено это делать, но не ожидайте, что ваш класс C будет автоматически использовать класс D вместо внутреннего класса B A.

person stryba    schedule 26.02.2012
comment
Это действительно важный аспект наследования структур данных внешнего/внутреннего класса. Есть ли какой-нибудь известный шаблон для решения этой проблемы (дженерики и т.д.)? - person sema; 05.11.2015
comment
Я бы сказал, введите фактический экземпляр B (в данном случае B или D), который вы хотите использовать. - person stryba; 05.11.2015

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

--- Мышление на языке Java

person Haomin    schedule 30.08.2018