※アクセッサ―は「getフィールド名()」というメソッド名をつけるのが慣習。
慣習に従うと、その記述を前提としたフレームワークが便利に使える。
継承
作る側が楽になるというメリットがある
- 新しい機能の追加(差分プログラミング)
- 既存の機能の書き換え(オーバーライド)
– 新しい機能の追加(差分プログラミング)
例)
public class DVDTV extends TV
TV;親クラス、スーパークラス←DVDTV;子クラス、サブクラス
単一継承(サブクラスは単一の親しかもたない)
DVDTVやGameTVはTVの一種。「is a 関係」が成立している。間違えた再利用をしてはいけない。
継承とインスタンス
サブクラスを使う側は、継承が使われているかどうかは意識することなく全ての機能が使える。
スーパークラスのフィールドにprivateがついていなければ直接サブクラスからアクセスできる。
privateがついているときには、ゲッター(メソッド)によって取得する。
継承とコンストラクタ
継承してもコンストラクタだけは継承されない。
サブクラスのコンストラクタの先頭にはコンパイラによりsuper();が挿入される。
super();は、スーパークラスの引数なしコンストラクタ呼び出しをする。
そのため、子クラスのインスタンス生成時に必ず親クラスのコンストラクタから実行される。
↓
もし親クラスが引数つきのコンストラクタしか持っていない場合、子クラスで引数なしのコンストラクタを書くとコンパイルエラーになる。
super(10);のようにsuperに明示的に引数を入れるとエラーは解消される。
– 既存の機能の書き換え(オーバーライド)
ポリモーフィズムを実現するために
サブクラスでスーパークラスと同じメソッドを再定義すること。
ポリモーフィズム;同じ操作で異なる動作をする
メモリには親のメソッドも読み込まれているが、子クラスに同じメソッドがあるためオーバーライドされたと認識されて外部からアクセス不可になる。
ただし、サブクラスでオーバーライドしたメソッドで親のメソッドを使用することがある。
super.メソッド名();と記述する。
コメント