🐙

Java言語における継承の関係についての個人的まとめ

2022/06/29に公開

目次

  1. 継承ツリー
  2. コンストラクタの順番
  3. 複数のクラスを一つのファイルにする
  4. protectedの機能について(protectedの注意点)

継承ツリー

  • Java言語「単一継承」といって、「同時には一つのクラスしか継承できない」って意味。つまり二つ以上の親クラスを同時に持てないってこと。
    孫クラスは親クラスの親のクラス(祖父?クラス)を取り入れることはできるが「同時に継承」はできない。継承しているのは「親クラスだけ」。(機能を取り込むことはできるが。)

コンストラクタの順番

A(祖父),B(親),C(子)クラスの順にクラスツリーが作られているとし、Cのコンストラクタが呼び出されると、

  1. Bクラスを継承しているので最初にBクラスのコンストラクタ(super~)が呼び出されるが、
  2. BクラスはAクラスを継承しているので先にAクラスのコンストラクタ(super~)が呼び出される。

こうして継承元を辿って、コンストラクタが実行される

  • また、子クラスで親のコンストラクタを呼び出すとき(super~)、superを省略できるのは引数がないときだけで引数があるときは省略できない。
    (引数を指定して必要な値を渡さないといけないから)

複数のクラスを一つのファイルにする

複数のクラスを一つのファイルにまとめる条件

  • ファイル名はpublicをつけたクラスと同じ名前にする
  • publicをつけるクラスは一つだけ
  • どのクラスにもpublicをつけなければ、ファイル名はなんでも良い
  • コンパイルすると、クラスの数だけ実行ファイル(classファイル)ができる

protectedの機能について

  • protectedはアクセス修飾子の一種である。(public,private系列)
  1. 同じパッケージ内にあるクラスに対してアクセスを許可する。(これはパッケージアクセスと同じ機能)
  2. 別のパッケージにあるクラスの場合は子クラスに限ってアクセスを許可する

protectedの注意点とは

  • 小クラスのメソッド内で親クラスのコンストラクタを初期化(インスタンス化)したりするのはできない点、つまり、

「継承したメンバにアクセスできるだけ」
「継承すればアクセスできるが、子クラスでも自分自身のインスタンスメンバでないとアクセスできない

ということ。

子クラス
 // ここで親クラスのインスタンス化・直接親クラスをいじるようなことはできないが
 // 子クラスのオブジェクトを受け取ることは可能。
 // 子クラス自身のインスタンスは受け取ることができ、問題なくアクセスできる
  • また、privateとprotectedはclassには適用できない

以上です。間違えが見つかり次第、或いは知識がアップデートされ次第改訂していきます。🙏

GitHubで編集を提案

Discussion