Нет экземпляра экземпляра типа 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();
}