「クラスの継承」と「オーバーライド」 職業訓練29日目
「継承とは?」
「継承」とは、すでに作成したクラスをもとに新しいクラスを作成することができる仕組みです。
例えば車を表すクラスの「class Car」が存在しているとします。そこで新たにレース用の車のクラス「class RacingCar」を作成する場合。普通の車とレース用の車でも共通するソースコードがある場合「class Car」のものを使って楽するために継承を使います。構文は以下のようになります
----------------------------------------------------------------------------
class Car ⇦もとになるクラス
{ナンバー;ガソリン量;ナンバーとガソリン量を表示する機能}
class RacingCar extends Car ⇦新しいクラス
{競技用コースの番号} ⇦追加するプログラム
----------------------------------------------------------------------------
↑のように「新しいクラス」+extends+「もとになるクラス名」にするだけで継承されます。そうすることで新しいクラスに、ナンバーとガソリン量を表示する機能を書く手間が省けます。
もとになるクラスを「スーパークラス」と言い、新しいクラスを「サブクラス」と言います。親子みたいなもんです。
またオブジェクトの生成のやり方も「スーパークラス」(今までやってきた普通のクラス)と変わりません。特に指定しがなければスーパークラスの引数のないコンストラクタが呼び出されます。指定したい場合super(引数)で呼び出します。
「クラス間のメンバへのアクセス方法」
次にサブクラスからスーパークラスのメンバにアクセスする方法です。privateをつけることで、他のクラスから正しくない値が入らないようにすることを学びましたが、親子といえどprivateは存在するのです。
この「private」を「protected」に変えるだけでサブクラスからスーパークラスのメンバにアクセスできるようになります。継承されていないクラスからはprivate同様にアクセスはできません。
「オーバーライド」
前回の記事でオーバーロードをやりました。オーバーロードとはクラス内に同じ名前のメソッドを持つことができる機能でした。ただし引数の型あるいは、数や順番が異なっていることが条件でした。
オーバーライドとはサブクラスでスーパークラスと全く同じメソッド名、全く同じ引数でメソッドを生成することができます。
それではメインクラスで全く同じメソッドを処理するときは、どちらが呼び出されるのかというと、新しく定義されたサブクラスのメソッドを処理します。
----------------------------------------------------------------------------
今日はこの辺で失礼します。暑さに負けず勉強頑張ります。ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?