【記事を書くことになったきっかけ】
プログラミングを学ぶ上でアウトプットが大事だと痛感することが最近多くありました。そこでよくお世話になっているQiitaで初アウトプットをするに至りました。
記事の内容
学校でオブジェクト指向についての授業を受けている中で、継承やオーバーライド、アブストラクトクラスについて調べる機会があったのでまとめてみました。
プログラミング初心者が自分で咀嚼したものをまとめたものなので、正確さは保証できないです。アウトプットの記録として残しているモノなので間違っている点がありましたらご指摘よろしくお願いいたします。
授業で使用していた言語はJavaです。
継承、オーバーライドとは?
・元々あるクラスの機能を使って、さらに自分で機能を追加したいときに用いる
・オーバーライド = 継承したスーパークラスのメソッドを継承先で再定義すること
・なんであるの?
→同じ内容のプログラムを違うクラスでいちいち書いていると変更が生じたときに修正するのに手間がかかる。そこで「継承」「オーバーライド」を使うと解決
・もととなる機能を持つクラスのことを スーパークラス、親クラス と表現
・ スーパークラス、親クラス を「継承」したクラスのことを サブクラス、子クラス と表現
(以後登場するスライドは私が授業の課題で作成した継承のイメージをイラスト化したものです)
黒字で書いてあるものが元々ある機能、青文字で書いてあるのが追加したい機能です
注意点
- 機能の制限
- ・継承元のクラスにおいて、「private」で宣言されたフィールドにはアクセスできない
- ・継承元のクラスにおいて、「proteted」で宣言されているフィールドには継承先のクラスからのみアクセスできる
- Objectクラスの継承
- ・javaでは何も継承していないクラスでもコンパイルするときに自動的にObjectクラスを継承させている
- →すべてのクラスでObjectクラスの機能を使うことができる
- コンストラクタの呼び出し
- ・インスタンスを生成するとスーパークラスの引数なしのコンストラクタも呼び出される
- 引数有りのコンストラクタを呼び出したい時は「super」を用いる
- 複数のクラスの継承
- ・継承先が複数あるのはOK
- ・継承元が複数あるのはNG
- →別々の継承元に同じ名前のメソッドがあると困るため
アブストラクトクラス(抽象クラス)とは?
・アブストラクトメソッド(抽象メソッド)を持つクラスのこと
→newすることができない
・抽象メソッドとは、定義だけで処理を書かないメソッド
→継承先のクラスに実装が委ねられている(必ずオーバーライドする)
例
ポリモーフィズムとは
・大きなルールの中で要素を組み合わせたりしてプログラムを組んでいく
継承、オーバーライド、アブストラクトクラスを組み合わせることでコードをより単純にみやすくすることができる。さらにメソッドなどの変更にも、より容易に対応できる柔軟性の高いものに仕上げることができる。
例
- レゴブロックで作るお城の設計書を作成する
- ・1階、2階の部分の組み立てはほとんど同じで、外燈の位置、色だけが違う
- →1、2階で共通の組み立ての項目を作り、異なる部分のみプラスアルファで記述(継承)
- 前述の異なる部分である色、外燈の位置(数)を1階と2階で最初から指定しておき、(パーツの袋に書いておくなど)設計書においていちいち記述する必要がないようにしておく(オーバーライド、アブストラクトクラス)