はじめに
プログラミングをはじめて学校で勉強して
単純な計算が理解できるようになり、
やれメソッドだ、戻り値だと何となく理解できてきた、、そんな時期
突如訪れる謎の呪文、、抽象クラス(Abstract)
だいたい理解する頃には授業についていけなくなっていました。。。。
そんなことにならないように小学生でも理解できるように説明する試みです。
ズバリ
抽象クラスとは、くだものです!!
・・・・・・・?
解説
日常会話で抽象的な表現というものがあります。
例えば、あなたがこれから買い出しに行くとしましょう。
頼んだ人に
「なにか食べたいものはありますか?」
と質問します。
するとその人は
「くだもの」
と一言いいました。
あなたはスーパーへ行きましたが、果たしてくだものとはバナナのことなのか?リンゴのことなのか?はたまたパイナップルのことなのか?わからなくなってしましました。
これが抽象的な表現です。
よくある何食べたい?「なんでもいいよ!」もこれと同じ抽象的です(笑)
プログラムの中の抽象クラスも同じような意味合いです。
リンゴクラスやメロンクラスをゼロから作成して見た目や味や食感などを決めるよりも、
味や食感など変数を用意した果物クラスを作って、
そのクラスから具体的なリンゴやメロンなど、名前にあった見た目や味や食感を設定したほうが楽に作ることができます。
この果物クラスのことを抽象クラスといい、
そこから具体的なクラスにすることを継承といい、
リンゴやメロンなど抽象クラスからできたクラスをサブクラスといい、
見た目や味や食感を設定することをオーバーライドといいます。
抽象クラスを用いることのメリットはいろいろありますが、
一番分かりやすいのは一括で変更できるというところです。
〈 鮮度 〉というパラメーターを追加するとき
100種類の果物すべて別クラスで作成されいたら、100種類クラスすべてに鮮度変数を追加する必要があります。
ですが、1つの抽象クラスから継承して作られた100種類の果物ならば、抽象クラスに鮮度変数を1つ追加するだけで、すべてのサブクラスに鮮度変数が追加されます。
抽象クラスはインスタンスを作れないというお約束があります。
はじめに話した例え話を思い出してみてください。
”果たしてくだものとはバナナのことなのか?リンゴのことなのか?はたまたパイナップルのことなのか?”
これはプログラムの中でも同じです。
あくまで定義として用意した抽象クラスを実体化することはできないとはこういうことです。
さいごに
いかがでしょうか?
何となくでも理解できるようになったらうれしいです。
周りで理解できてなさそうな人にこの記事のURLを送り付けていただけると幸いです。