Нет экземпляра экземпляра типа PerfHelper, доступного из-за некоторого вызова промежуточного конструктора
Рассмотрим приведенный ниже код:
class abstract Normal1 extends Something
{
}
class Outer
{
class abstract Inner extends Normal1
{
}
}
class General extends Outer.Inner // Problem occurs at this
{
}
Ошибка, которую я получаю, - "Нет экземпляра экземпляра типа PerfHelper доступен из-за некоторого вызова промежуточного конструктора"
Мой вопрос: могу ли я расширить внутренний класс, как указано выше?
Ответы
Ответ 1
Объявите внутренний класс как статический, и вы сможете его расширить:
class outer {
static abstract class inner extends normal1 { }
}
Если внутренний не абстрактный, он привязан к внешнему и может существовать только тогда, когда существует экземпляр внешнего. Проверьте, действительно ли это то, что вы действительно хотите.
Ответ 2
Вложенный класс подобен (в смысле) Свойству класса.
- Как и в случае переменной экземпляра, он доступен только тогда, когда доступен, когда его объект создается так же, как класс
inner
, также доступный при создании внешнего объекта.
Итак, если вы хотите расширить это, сделайте свой внутренний класс static inner class
Как указано выше,
Ответ 3
Попробуйте это, (прочитайте вложенный класс правила наследования).
abstract class normal1 extends something { }
class outer
{
abstract class inner extends normal1{}
}
class Outer1 extends outer
{
class General extends inner {}
}
Ответ 4
В вашем классе General измените его конструктор a, чтобы вызвать супер внутренний класс конструктора. вот код.
public General(){
new outer().super();
}