🎉

プログラミング自主学習 20日目 this&super/継承とコンストラクタ

2023/06/15に公開

this&super

thisはインスタンス、superはスーパークラスのことだ。
Overridingした後、またスーパクラスのメソッドを使いたい場合は、継承したメソッドにsuperを付ける。
Cal3の値はCalと同様5であるが、実際は"Oh,yeah!"を出力した後からはcalのsumメソッドを呼び出している。

また、コードを読みやすくするため、Overloadingしたメッソドはthis.を使用してまとめることができる。

例えば、クラスCalのメソッドであるsum(int v1, int v2, int v3)はsum(int v1, int v2)よりOverloadingしたメッソドであり、
ある意味では包含関係であるため、this.を使用し、まとめることができる。

以下がまとめた例である。

継承とコンストラクタ

スーパクラスにコンストラクタがあると仮定すれば、サブクラスにもコンストラクタが必要である。

その場合はサブクラスにはスーパークラスのコンストラクタが必修になる。

Interface

プログラミングは共同作業である。すべての機能を制作するのではなく、外注する場合も多いが、その際に、コミュニケーションが通じないことで、このようなすれ違いが生じる可能性もある。
そのため、存在するのがInterfaceである。


このように、Interfaceのどおりコードを作成したい限り、コンパイルすらできない。
こういったコードを通してクラスを規定する互いの約束をInterfaceという。


interfaceのコードに合わせてOverridingする機能もIDEに備わっている。

Interfaceの形式

1)インターフェース名は主に形容詞で作成する

interface Calculable{} , interface Printable{}

2)一つのクラスには様々なインターフェースが具現できる。

class RealCal implements Calculable, Printable {}

3)インターフェースではクラスの変数とメッソドを定義することができる。

変数には必ず値が必要であり、メソッドは技能ではなく、形のみ定義できる。

要するに、メッソドの内容はクラスより規定する必要がある。

polymorphism (ポリモーフィズム/多態性/多相性)

多態性を例えると一つのクラスが様々な形を持つことである。

インターフェースを持つクラスのインスタンスを作成する場合、データー型としてクラスだけでなく、そのクラスのインターフェースに指定することもできる。

RealCal c = New RealCal(); ➡ Printable c = New Realcal();

これにより、クラス内で使用したい変数とメソッドを取捨選択ができる。

また、異なるクラスであっても、同じインターフェースを持っているクラスであれば、インスタンス化時にをする際に互換性や柔軟性があるため、呼び出すことができる。以下がその例である。

Discussion