【Java入門(3)オブジェクト指向:活用編 #3】継承

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は…

Java入門3 オブジェクト指向:活用編 #3
継承

というテーマでお送りします。

彩香
継承…。引き継ぐということでしょうか…。

新たな考えですね。確実に、聴いていきます。

剛留
今回も、頑張ります!

【1】 継承とは

継承とは

既存のクラスを元に、拡張して
新しいクラスを定義すること。

です。
元になるクラスを…

スーパークラス(親クラス)

といいます。
そして、親クラスを元に定義されたクラスを…

サブクラス(子クラス)

といいます。

サブクラスは、スーパークラスの
メンバを引き継ぎます。

継承とは
✅ 既存のクラスを元に、拡張して
  新しいクラスを定義すること。

✅ 元になるクラスをスーパークラス
  (親クラス)という。

✅ 親クラスを元に定義されたクラスを
  サブクラス(子クラス)という。

✅ サブクラスは、スーパークラスの
  メンバを引き継ぐ。

イメージは、このような感じです。

あるクラスAがあります。

メンバ(フィールドやメソッド)が定義されています。

別のクラスBでは、これらのメンバを継承して
更に拡張して メンバを定義できます。

この時に、クラスAをスーパークラスといい…

クラスBをサブクラスといいます。

【2】 クラス図

クラス図は、このように記述します。

スーパークラスを書きます。
フィールドとメソッドが記述されています。

そして、サブクラスを書きます。
こちらには…

追加分のフィールドとメソッド

を書きます。

そして 両者の関係性は、このように表します。

線で結んで、スーパークラス側に
三角の印がついています。

矢印ではなく、三角の印です。

この関係性は

「汎化」

です。

オブジェクト指向の考えでは…

いつくかのオブジェクトの共通点を抽出して
定義することを

「汎化」

といいいます。

サブクラスの特性の 基本的な部分を抜き出すと
スーパークラスになる…。といった感じですね。

反対に、あるオブジェクトに 特性を加えて
新たに定義することを

「特化」

といいます。

こちらは、スーパークラスに 特性(メンバ)を
追加して、サブクラスを定義する。…という感じです。

サブクラス と スーパークラス の関係は

「汎化」と「特化」の関係

ということ…

今のところは、何となくで良いので
押さえておきましょう。

この記号の向きは、要チェックですよ。

彩香
何となく、向きを逆に考えてしまいそうですが…。
スーパークラスのほうに、三角がついているんですね。

ノートに 図を書いておきます。

剛留
「汎化」「特化」何とな~く、分かります。
ここも、チェックしておきます。

【3】 サブクラスの定義と利用

サブクラスの定義はこのようになります。

class サブクラス名 extends スーパークラス名

という形で extends キーワードを用いて 定義します。

そして、クラスのブロックの中には…

スーパークラスの定義との差分

のみ記述します。この事を

『差分コーディング』

といいます。

サブクラス を インスタンス化 すると…

そのインスタンスには、スーパークラスで
定義されたメンバも存在する事となります。

そして 利用する側は、サブクラスのメンバ と同様に
スーパークラスのメンバ にアクセスできます。

イメージは、このようになります。

スーパークラスが定義されています。
このスーパークラスにはメンバがあります。

このスーパークラスを継承して
サブクラスが定義されています。

extends キーワードを使用して定義して
差分のみ記述します。

サブクラスで追加するメンバのみです。

利用する側は、サブクラスをインスタンス化すると
そこには、スーパークラスで定義されたメンバと
サブクラスで定義されたメンバが存在します。

ですので…

利用する側は、どのメンバに対しても
同様に アクセスできます。

このイメージで押さえておきましょうね。

【4】 継承の利点

利点は 大きく2つあります。

1つは…

生産性が上がる。

ということです。

既存のクラスを活用して、差分をコーディング
する方式なので とても生産性が上がります。

それまでのプログラム資産を 無駄にしない
こととなりますね。

もう1つは…

保守性が優れている。

ということです。

継承を使わないと、同じコード(プログラム)が
多数存在してしまうことになり…

修正箇所も 多くなってしまう傾向にあります。

それに対して、継承していれば、その継承元のみの
対応で済む場合が多くあります。

このような利点があることも
知っておきましょう。

継承の利点
✅ 生産性が上がる。

✅ 保守性に優れている。

【5】 継承のポイント

継承のポイントをいくつか
見ていきましょう。

① サブクラスのサブクラス

あるサブクラスがある場合
更に そのサブクラスを 作ることができます。

元になるクラスのメンバは…

サブクラス、サブクラスのサブクラス…と
順に継承されることとなります。

ただし 小さな継承を多用すると、かえって
わかりにくくなってしまう場合もありますので

このあたりは 継承する時に
整理して 考える必要があります。

② java.lang.Objectクラス

extendsキーワードを付けずに
クラスを 定義した場合には…

java.lang.Object

を暗黙的に継承します。

また、何らかのクラスを継承した場合にも…

元を辿ると Java.lang.Object クラスを
継承しています。

したがって、全てのクラスは

Java.lang.Object のメンバを
全て持っている。

という事となります。

③ 単一継承

Javaは、クラスを定義する時に
継承元に指定できるクラスは1つだけです。

これを「単一継承」といいます。

複数のクラスを 継承して
クラスを作る事は できません。

こちらは「多重継承」といいます。

他の言語では こちらを採用している場合も
ありますが、Javaでは不可となっています。

Javaは「単一継承」。押さえておきましょう。

彩香
サブクラス の サブクラス を増やしていくと
既にあるクラスを 有効活用できそうですね。

分かりにくくならない範囲で
活用していこうと思います。

剛留
単一継承は、2つのクラスを
同時に継承できないということですね。

理解しました。

【まとめ】

【1】 継承とは
✅ 既存のクラスを元に、拡張して
  新しいクラスを定義すること。

✅ 元になるクラスをスーパークラス
  (親クラス)という。

✅ 親クラスを元に定義されたクラスを
  サブクラス(子クラス)という。

✅ サブクラスは、スーパークラスの
  メンバを引き継ぐ。

【2】 クラス図
✅ スーパークラスとサブクラスは
  線で結んで、スーパークラス側に
  三角の印をつける。
【3】 サブクラスの定義と利用
✅ 定義方法
  class サブクラス名
    extends スーパークラス名

✅ 利用する側は、サブクラスのメンバも
  スーパークラスのメンバも
  同じように利用できる。

【4】 利点
✅ 生産性が上がる。

✅ 保守性に優れている。

【5】 継承のポイント
① サブクラスのサブクラスも
  定義することができる。

② 全てのクラスの親クラスは
  java.lang.Object。

③ スーパークラスは
  1つだけ指定できる。
 (単一継承)