12

サブクラスCがインスタンス化されると、そのスーパークラスのコンストラクタ ( A、およびB( Bextends A) など) が よりも早くインスタンス化されることが知られていますC。つまり、これは次のことを意味します。

  1. A のインスタンス、B のインスタンス、C のインスタンスに個別のメモリが割り当てられていますか?
  2. サブクラスインスタンスの場合、それ自身のフィールドに加えて、およびCから継承されたフィールドに割り当てられたすべての物理メモリがありますか?BA
  3. のインスタンスには、それ自身のフィールドに加えて、B継承されたフィールドの物理メモリがありますか?A
4

2 に答える 2

12

...そのスーパークラスのコンストラクター(たとえば、A、およびB(BはAを拡張します))がインスタンス化されることが知られています...

クラスはインスタンス化されます。コンストラクターが呼び出されます

(編集で、これは「オブジェクトがインスタンス化される」べきであることが提案されましたが、これは技術的に正しくありません。以下にリンクされている同じ JLS セクションによると、「新しいクラス インスタンスは、クラス インスタンス作成式の評価時に明示的に作成されます。つまり、オブジェクトを取得するためにクラスをインスタンス化します。オブジェクトはインスタンスです。オブジェクトをインスタンス化しません。)

1) A のインスタンス、B のインスタンス、および C のインスタンスに個別のメモリが割り当てられていますか?

いいえ、クラスインスタンスがあります。つまり、思い出の一枚。

2) サブクラス C のインスタンスの場合、それ自体のフィールドに加えて、B および A から継承されたフィールドに割り当てられたすべての物理メモリがありますか?

はい:「新しいクラスインスタンスが作成されるたびに、クラスタイプで宣言されたすべてのインスタンス変数と、クラスタイプの各スーパークラスで宣言されたすべてのインスタンス変数のためのスペースを備えたメモリスペースが割り当てられます。隠される。」

3) B のインスタンスは、自身のフィールドに加えて、A から継承されたフィールドの物理メモリを持っていますか?

1 のとおり、このシナリオには「B のインスタンス」はありません。1 つのインスタンスのみがあります。

出典: 12.5. 新しいクラス インスタンスの作成、JLS 7

于 2012-12-16T01:41:23.563 に答える
5
  1. 1 つのインスタンスのみが割り当てられます。
  2. そのインスタンスには、すべてのクラスのすべてのフィールドが含まれています。
  3. 1 つだけのインスタンスには、およびCから継承されたフィールドのメモリがあります。AB
于 2012-12-16T01:42:07.087 に答える