サブクラスのコンストラクタメソッドを使用してサブクラスのオブジェクトを作成する場合、サブクラス内で宣言されたメンバ変数だけでなく、親クラスのメンバ変数にもメモリ空間が割り当てられますが、継承された部分のみがメモリ空間として割り当てられます。サブクラスが割り当てられます。メンバ変数は、サブクラスのオブジェクトに割り当てられる変数として機能します。
つまり、親クラスのプライベート メンバー変数にはメモリ領域が割り当てられていますが、同様に、サブクラスと親クラスが同じパッケージ内にない場合は、たとえフレンドリであっても、サブクラス オブジェクトの変数としては使用されません。親クラスのメンバー変数にはメモリ空間が割り当てられていますが、サブクラス オブジェクトの変数としては割り当てられていません。
この時点で、サブクラスがオブジェクトを作成するときに一部のメモリが浪費されているように見えると多かれ少なかれ感じます。これは、サブクラスを使用してオブジェクトを作成すると、親クラスのメンバー変数にもメモリ空間が割り当てられますが、その一部のみがサブクラスのオブジェクトに割り当てられる変数として使用されるためです。たとえば、親クラスのプライベート メンバー変数にはメモリ領域が割り当てられていますが、親クラスを使用しないため、それらはサブクラス オブジェクトの変数としては使用されません。オブジェクトを作成するためのクラス。ただし、サブクラスには親クラスから継承されたメソッドがまだいくつかありますが、これらのメソッドは継承されていない変数を操作できることに注意してください。
たとえば、サブクラス ChinaPeople のオブジェクトは、継承されたメソッドを呼び出して、サブクラスによって継承されていないがメモリ領域が割り当てられている変数を操作します。
classPeople{privateintaverHeight=168;publicintgetAverHeight(){returnaverHeight;}}classChinaPeopleextendsPeople{intheight;publicvoidsetHeight(inth){//height=h+averHeight;//不正です、サブクラスはaverHeightheight=hを継承しません;}publicintgetHeight(){returnheight ; }}publicclassMainpublicstaticvoidmain(Stringargs[]){ChinaPeoplezhangSan=newChinaPeople();System.out.println(サブクラス オブジェクトによって継承されない AverageHeight の値: +zhangSan.getAverHeight());zhangSan.setHeight(180);System .out .println(サブクラス オブジェクトのインスタンス変数高さの値は: +zhangSan.getHeight());}}
実行結果は次のとおりです。
サブクラス オブジェクトによって継承されない AverageHeight の値は 168 です。サブクラス オブジェクトのインスタンス変数 height の値は 180 です。