newで何が起こる

クラスもメモリを使う

突然ですが問題です。次のプログラムは何が表示されるでしょうか。

答えは「4」です。当たり前だと思われる人も多いかと思いますが、より複雑なクラスを理解するには重要なところです。動きを確認していきましょう。

7行目でクラスTestが「new」されるとクラスがメモリに展開され、「abc」という名前が付けられるとイメージしてください。

8行目でさらにクラスTestが「new」されるとメモリに展開され、「def」という名前が付けられます。

つまり同じクラスTestですが「new」されるたびに別のメモリに展開され別の名前が付きます。そのためメソッドsetNumで変数numに値を設定すると、abc、defそれぞれ別の値を保持できるのです。

継承した場合

次のようにクラスTest2がクラスBaseを継承している場合はどのようにメモリに展開されるのでしょうか。

継承元クラス(スーパークラス)も継承クラス(サブクラス)もメモリに展開されます。

21行目~24行目のようにサブクラスでメソッドをオーバーライドしている場合は、オーバライドしているメソッドが優先的に実行されます。

スーパークラスはメモリに展開されると「super」という名前が付きます。スーパークラスにアクセスしたい時には、23行目のように「super.」を付けてます。

理解しずらいクラスの構造に出会うことがあります。その時には、どのようにメモリに展開されるかイメージすると解決することがありますので、是非試してみてください。

タイトルとURLをコピーしました