いつも忘れるオブジェクト指向。
まとめておくことにします。
オブジェクト指向のプログラミング言語はC++、C#、Java、Objective-C、Python、PHPなどなど多数。
よく三大特徴と言われるもの。
継承(インヘリタンス)
隠蔽(カプセル化)
多態性(ポリモーフィズム)
基本の「クラス」を継承することでそのクラスに定義されている、変数(プロパティ、メンバ変数)、関数(メソッド)を
引き継ぐことが出来る。
何が嬉しいかと言えば、親クラスに無いけど必要な機能がある場合追加したり
振る舞い(動き)を継承先で変更させたり出来る。
あと再利用性も高まります。
仕様変更にも強くなります。親を変えてしまうのではなく、継承先で変更してしまえば良いのです。
隠蔽されると何が嬉しいのか?
それは意図しない変更をされないのでバグとかを封じることにも繋がるのです。
クラスの変数や関数には、公開レベル(アクセスレベル)を付けることが出来ます。
・public
どこからでもアクセス出来る。
継承すれば継承先でも、クラスを実態(使える形)にして直接呼び出すことも出来る
・protected
継承元と継承先だけでアクセス出来る。
クラスを実体化して呼び出すことは出来ない。
・private
定義されたクラス内でのみ呼び出すことが出来る。
クラスを実体化して呼び出すことも、継承先で呼び出すことも不可。
予期せぬ呼び出しや変数の値が予期せず変更されたりを防ぐことが出来るので良いとされます。
一番名前的になんだ?と思うのがポリモーフィズム、多態性。
オーバーライドが一番良い例でしょう。
継承元で既に定義されている関数を、継承先でもその機能を上書きしたり、動きを変えたり。
そうすると同じ親を持っている別々のクラスが別々の振る舞いをするようになります。
あとはインスタンス(クラスをNewして使える状態にした)に対する引数によって
振る舞いを変えたり(これは多態性かどうか微妙ですが)できます