web-dev-qa-db-ja.com

いくつかの中間コンストラクター呼び出しのため、PerfHelper型の包含インスタンスは使用できません

以下のコードを検討してください。

class abstract Normal1 extends Something 
{
}

class Outer 
{
  class abstract Inner extends Normal1
  {

  }
}

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

私が得ているエラーは、「いくつかの中間コンストラクター呼び出しのため、PerfHelper型の囲んでいるインスタンスは利用できません」です。

私の質問は、上記のように内部クラスを拡張できますか?

24
user911333

内部クラスをstaticとして宣言すると、それを拡張できるはずです。

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

内側が抽象的でない場合、それは外側に結び付けられ、外側のインスタンスが存在する場合にのみ存在できます。これが本当に必要なものかどうかを確認してください。

28
Jordão

ネストされたクラスは、(ある意味で)クラスのプロパティのようなものです。

  1. インスタンス変数の場合と同様に、オブジェクトが作成されたときにのみ使用可能であり、innerクラスと同じように、外部のオブジェクトが作成されたときにも使用可能です。

したがって、これを拡張する場合は、内部クラスをstatic inner classとして作成します。
ジョルダンが上で示唆したように

6
Sumit Singh

クラスGeneralで、そのコンストラクターaを変更して、スーパー内部クラスコンストラクターを呼び出します。これがコードです。

public General(){
    new outer().super();
}
2
Siddappa Walake

これを試してください(ネストされたクラスを読み取る 継承ルール )。

abstract class normal1 extends something { }

class outer
{
  abstract class  inner extends normal1{}
}

class Outer1 extends outer
{
  class General extends inner {}
}
2
adatapost