現在、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さん → 野球選手 → スポーツ選手
といったように、情報を単純なものに置き換えて考える方法。
- ポリモーフィズム
抽象化してオブジェクトを扱うこと。
- 情報隠蔽
抽象化の効果を維持するために必要な設計原則。
公開すべきもの、非公開にすべきものを区別して扱う。
実現方法はインターフェース、パッケージ、アクセス修飾子がある。
- インターフェース
フィールドとメソッド名のみを定義する。
メソッドの中身=処理方法は書かない。
インターフェースのメリットは、複数のクラスをまとめて操作することができることです。
しかし、下記のページを見た方が分かりやすいです。
プログラミングは具体例を見ると理解しやすいので、こういうページは助かります。
自分でも、この理解で正しいのか?と疑問になりながら、突き進んでます。
プログラムは、ある日、突然、壁を越えたように分かるようになるので、それまで頑張ります。
コメント