0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

継承 メソッドとインスタンス変数のメモリ配置

Posted at

継承とは「クラスの共通部分を別クラスにまとめる仕組み」。共通部分とは、具体的には共通なメソッドとインスタンス変数を指す。この継承の仕組みにより、スーパークラスの定義場所をサブクラスでそのまま利用できる。

しかし同じ継承される情報と言っても、メモリ配置の観点からするとメソッドとインスタンス変数では全く異なる場所に配置される。

class Employee extends Person {
    private int employeeNum
    public void setEmployeeNum(int empNum) { /* ロジックは省略 */}
    public int getEmployeeNum() { /* ロジックが省略 */}
}

EmployeeクラスはPersonクラスを継承しているので、Personクラスに定義されたメソッドとインスタンス変数をそのまま利用できる。

この時のメモリ配置を整理すると以下のようになる。

配置場所
スーパークラスに定義されたメソッド スーパークラスのメソッドテーブルに定義。
継承されたメソッド サブクラスのメソッドデーブルに格納されるが、実際のコード情報はスーパークラスのものを使い回す。サブクラスでは継承されたメソッドのコード情報はサブクラスでメモリに展開はせずに、スーパークラスの情報を利用する。
インスタンス変数 親クラスから継承されたインスタンス変数は各インスタンスにコピーされる。しかし、実際の値はインスタンスごとに異なる。

▼参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?