プログラミング自主学習 20日目 this&super/継承とコンストラクタ
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