サブクラスのオブジェクトを作成すると、サブクラスの継承元であるスーパークラスのオブジェクトも作成されますか? そうでない場合は、(マルチスレッドで) Thread クラスのサブクラスを作成して、Thread クラスのコンストラクターを呼び出し、Thread オブジェクトを作成する方法を教えてください。
6 に答える
オブジェクトを作成すると、すべてのデータを保持するために、1 つの変数セットを含む 1 つのメモリが取得されます。
サブクラスには、子のフィールドとその祖先のフィールドが含まれます。つまり、子とその先祖のように振る舞う単一のオブジェクトです。サブクラスを作成するときに作成される親クラス オブジェクトはありません。
ここで私はその例で省略しています
子クラス オブジェクトを作成すると、自動的にスーパー クラス オブジェクトが作成されますか?
class P{
P(){
System.out.println(this.hashCode()); // it will print 2430287
}
}
class C extends P{
C(){
System.out.println(this.hashCode()); // it will also print 2430287
}
}
public class Test{
public static void main(String... args){
C obj = new C();
System.out.println(c.hashCode()); //Again, it will print 2430287
}
}
このコードをコンパイルして実行すると、同じオブジェクトhashCode
が出力されていることがわかります。したがって、これは作成されるオブジェクトが 1 つだけであることを意味します。
では、親クラス オブジェクトはどのように初期化されているのでしょうか。
この例では、子クラスのインスタンスである 1 つのオブジェクトのみが作成されますが、2 つのコンストラクター (親と子) が実行されます。しかし、コンストラクターは子クラスのみのコンテキストにあります。
いいえ。親クラスのインスタンスは作成されません。しかし、確かにインスタンスが作成されます。そして、オブジェクト参照が子クラスに渡されます。したがって、インスタンスは親クラスで作成され、子クラスのコンストラクターによって呼び出されます。子クラスのメソッドが動作します。