以下のコードを検討してください。
class abstract Normal1 extends Something
{
}
class Outer
{
class abstract Inner extends Normal1
{
}
}
class General extends Outer.Inner // Problem occurs at this
{
}
私が得ているエラーは、「いくつかの中間コンストラクター呼び出しのため、PerfHelper型の囲んでいるインスタンスは利用できません」です。
私の質問は、上記のように内部クラスを拡張できますか?
内部クラスをstaticとして宣言すると、それを拡張できるはずです。
class outer {
static abstract class inner extends normal1 { }
}
内側が抽象的でない場合、それは外側に結び付けられ、外側のインスタンスが存在する場合にのみ存在できます。これが本当に必要なものかどうかを確認してください。
ネストされたクラスは、(ある意味で)クラスのプロパティのようなものです。
inner
クラスと同じように、外部のオブジェクトが作成されたときにも使用可能です。したがって、これを拡張する場合は、内部クラスをstatic inner class
として作成します。
ジョルダンが上で示唆したように
クラスGeneralで、そのコンストラクターaを変更して、スーパー内部クラスコンストラクターを呼び出します。これがコードです。
public General(){
new outer().super();
}
これを試してください(ネストされたクラスを読み取る 継承ルール )。
abstract class normal1 extends something { }
class outer
{
abstract class inner extends normal1{}
}
class Outer1 extends outer
{
class General extends inner {}
}