今回はプログラミング言語Javaに関する、
スーパークラスとサブクラスについて書き溜めます。
オブジェクト指向プログラミングを学ぶ上でも
役立つ概念なので情報機科学初心者のマイルストーンとして残しておく。
概要
スーパークラスとサブクラスの違い
まず、簡潔に言い表すと、
オブジェクト指向において、継承元の親クラスをスーパークラスと言い、
継承したことで生成される子クラスをサブクラスと言う。
スーパークラスでできることを引き継ぎ、さらに新しい機能が使えるように拡張したいと思ったときに
サブクラスとして「継承」する。
そもそもクラスとは?オブジェクト指向プログラミングとは?
となった人は過去記事「オブジェクト指向プログラミングの基本概念」を参照されたい。
サブクラスでできること
次にサブクラスでできることを挙げたい。
「継承」なんて言葉を使ってスーパークラスからわざわざ生成するぐらいだから
なにかサブクラスならではのできることがあるはずである。
- スーパークラスのメソッドを上書きできる
- スーパークラスのフィールドを上書きできる
- スーパークラスのフィールドを追加できる
- スーパークラスのフィールドを追加できる
つまり、「継承元」であるスーパークラスの変数やメソッドを利用できるし、
利用するだけでなく独自のメソッドとして上書きし利用できるのである。
サブクラスでできないこと
サブクラスでできないこととして、
スーパークラスのフィールドを変更できない場合がある。
例えばJavaの場合、
親クラスに final を使ったフィールドは上書き禁止となっている。
また、2つのクラスを同時に継承することはできない。
1つのサブクラスが複数のスーパークラスを持てない点も忘れてはいけない。(多重継承はできない)
他にも、final宣言されたスーパークラスを継承することはできない点に注意である。
Java サブクラスの宣言方法
Javaを使ってサブクラスを宣言する方法は「extents」を利用する。
1 2 3 4 |
// class サブクラス名 extends スーパークラス名 のルールである。 class MySubClass extends MySuperClass { } |
Java オブジェクトクラスとクラス階層
Java言語におけるクラスは、木構造で表されるクラス階層を構成する。
Javaにおいて最上位に位置するクラスが存在し、その他全てのクラスは、そのクラスから木構造で表されるのだ。
そのルートクラスを
「java.lang.Object クラス(Objectクラス)」 という。
つまり、通常のクラスを宣言しているように見えるが、実はObjectクラスのサブクラスなのである。
下記の宣言は等価である。
class A {} <=> class A extends Object{}
スーパークラスの制約
Javaにおいてスーパークラスとサブクラスの関係には制約がある。
- サブクラスに対してスーパークラスは1つだけ
- サブクラスを複数持つことができる
- サブクラスをスーパークラスにダウンキャストするとコンパイルエラーになる
「継承」についてもいずれ別記事でまとめるが、
スーパークラスとサブクラスの関係が少しでも見えてくると理解が進むと思う。
今回は、スーパークラス・サブクラスについて理解を深めて貰えれば幸いである。
じゃあね〜〜〜〜。