Нет доступного экземпляра типа PerfHelper из-за некоторого промежуточного вызова конструктора - PullRequest
21 голосов
/ 18 ноября 2011

Рассмотрим приведенный ниже код:

class abstract Normal1 extends Something 
{
}

class Outer 
{
  class abstract Inner extends Normal1
  {

  }
}

class General extends Outer.Inner  // Problem occurs at this 
{
}

Я получаю сообщение об ошибке: «Нет доступного экземпляра типа PerfHelper из-за некоторого вызова промежуточного конструктора»

Мой вопрос: могу ли ярасширить внутренний класс как выше?

Ответы [ 4 ]

26 голосов
/ 18 ноября 2011

Объявите внутренний класс как static , и вы сможете расширить его:

class outer {
  static abstract class inner extends normal1 { }
}

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

5 голосов
/ 18 ноября 2011

Вложенный класс подобен (в смысле) свойству класса.

  1. Как и в случае переменной экземпляра, она доступна, только когда она доступна, когда ее объект создан так же, как класс inner, также доступна при создании объекта external.

Так что еслиВы хотите расширить это, а затем сделать свой внутренний класс следующим образом: static inner class
Как советует Джордао выше

1 голос
/ 20 мая 2017

В вашем классе General измените его конструктор a для вызова супер внутреннего конструктора класса.вот код ..

public General(){
    new outer().super();
}
1 голос
/ 18 ноября 2011

Попробуйте, (Прочитайте вложенный класс правила наследования ).

abstract class normal1 extends something { }

class outer
{
  abstract class  inner extends normal1{}
}

class Outer1 extends outer
{
  class General extends inner {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...