【Java】オブジェクト指向の備忘録【カプセル化、継承】

プログラミング

現在、JavaSE Silverを勉強中ですが、Bronzeの範囲で引っかかることがあります。

Bronzeに合格したのが2022年1月末なので、3ヶ月で勉強した結果を失いつつあることを実感。
備忘録を作っておくことにしました。

より正確な概要はスクールサイトに任せて、分かりやすさや留意点を重視して書きます。

カプセル化、データ隠蔽

  • カプセル化
    関連データと、そのデータの処理方法を纏めること。
    つまり、関連するフィールドとメソッドは1つのクラスにまとめて置きましょう ということ。
  • データ隠蔽
    目的:カプセル化の維持。
    方法:アクセス修飾子、getter、setterでアクセス操作を行います。

継承、抽象化、ポリモーフィズム、情報隠蔽

継承

各クラスで共通する部分をまとめて記載します。
メリットとして、各クラスで同じ処理を何度も書く必要がなくなります。

留意点をいくつか記載しておきます。

class A
Class B extend A の場合、
つまり、クラスBがクラスAを継承している場合

A a = new B() と記述することは可能。
Bクラスには「extend A」と記載されているため、
コンパイラがBクラス(継承先)からAクラス(継承元)を辿ることが出来る。
※コンパイラ:Javaを実行するための翻訳機

A a = new B() と記載した後、
B b = a と記述することはできない。
Aクラスには「extend B」に当たる手がかりが無いため、
コンパイラがAクラス(継承元)からBクラス(継承先)を辿ることが出来ない。
つまり、継承元がどのクラスに継承させたかは分からない。

裏技として、次のようにコード作成者が明示的に継承元を記述することで、扱えるようになる。
B b = (B) a
A a = new B() と記述した場合、使用されるメソッドは状況による。
BクラスのインスタンスをA型として使うが、あくまでインスタンスはBクラス。
A型として使う場合、Bクラス独自のメソッドは無視される。
しかし、Aクラス、Bクラスで同じ名前のメソッドを持つ場合は、Bクラスでオーバライドされたメソッドが使われる。

継承に関連する単語

  • 抽象化
    対象データの共通部分を抜き出して、単純化する方法。
    共通部分を抜き出して、スーパークラスに記載する「継承」を説明する際に使われる単語です。
Aさん、Bさん、Cさん → 野球選手 → スポーツ選手
といったように、情報を単純なものに置き換えて考える方法。

  • ポリモーフィズム
    抽象化してオブジェクトを扱うこと。

  • 情報隠蔽
    抽象化の効果を維持するために必要な設計原則。
    公開すべきもの、非公開にすべきものを区別して扱う。
    実現方法はインターフェース、パッケージ、アクセス修飾子がある。

  • インターフェース
    フィールドとメソッド名のみを定義する。
    メソッドの中身=処理方法は書かない。

    インターフェースのメリットは、複数のクラスをまとめて操作することができることです。
    しかし、下記のページを見た方が分かりやすいです。
    プログラミングは具体例を見ると理解しやすいので、こういうページは助かります。


自分でも、この理解で正しいのか?と疑問になりながら、突き進んでます。
プログラムは、ある日、突然、壁を越えたように分かるようになるので、それまで頑張ります。

コメント

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