はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回は抽象クラスについて説明していきます。
Java記事のまとめはこちらです。
前回の記事は【Java開発】第16回 オーバーライドです。
抽象クラス
抽象クラスとは?
抽象メソッドを1個以上含めているクラスを抽象クラスといいます。
通常のクラスと抽象クラスは抽象メソッドの有無以外の違いはありません。
抽象クラスはそのままインスタンスを生成することができません。
抽象メソッドとは?
抽象メソッドはメソッドの宣言だけが存在し、実行時の動作が記述されていないメソッドです。
一般のメソッドと異なり、継承される子供クラスで必ずオーバーライドして動作を定義する必要があります。
つまり、抽象クラスは継承して使うことを前提にして作られるクラスです。
抽象クラスの書き方
1 |
アクセス制御子 abstract class クラス名 {} |
サンプル
1 2 3 |
public abstract class AbstactSample { } |
抽象メソッドの書き方
1 |
アクセス制御子 abstract 戻り値のデータ型 メソッド名(引数); |
サンプル
1 2 3 |
public abstract class AbstactSample { public abstract void display(int showItem); } |
抽象メソッドは実装がなく、メソッド名、戻り値のデータ型、引数だけを見て何のためのメソッドか
を判断する必要がありので、JavaDocコメントを作成するほうがいいです。
抽象クラスの注意点
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public abstract class AbstactSample { public abstract void display(int showItem); public int sumNumber(int number1, int number2) { return number1 + number2; } } public class ExcuteClass { public static void main(String[] args) { AbstactSample abstactSample = new AbstactSample(); } } |
上記サンプルのように抽象クラスはインスタンスを生成することができません。
インスタンスが生成できない理由は、実装されていない抽象メソッドの対応ができないのでです。
しかし、実装されていない抽象メソッドをインスタンスが生成されるときに実装するとインスタンス
の生成ができるようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class ExcuteClass { public static void main(String[] args) { AbstactSample abstactSample = new AbstactSample() { @Override public void display(int showItem) { System.out.println(showItem); } }; abstactSample.display(10); } } |
上記のようにインスタンスを生成することができます。
抽象クラスの継承
上記のサンプルのようにインスタンスが生成されるたびに抽象メソッドを実装して使うこともできま
すが、 一般的には抽象クラスを継承する子供クラスを作成して使います。
サンプル
1 2 3 |
public class AbstractChild extends AbstactSample{ } |
上記のように抽象メソッドを実装しないとコンパイルエラーが表示されます。
コンパイルエラーが表示されているところをマウスオーバーすると
上記のようなものが表示されます。
表示されたものの「Add unimplemented methods」をクリックすると自動で抽象メソッドのオーバーライドが作成されます。
生成された空のメソッドで必要な処理を作成して抽象メソッドを実装します。
p
1 2 3 4 5 6 7 |
ublic class ExcuteClass { public static void main(String[] args) { AbstractChild abstractChild = new AbstractChild(); abstractChild.display(10); } } |
上記のように子供クラスのインスタンスを生成して抽象メソッドを呼び出すことができます。
終わりに
今回の記事は以上になります。
次回はインターフェースを学びましょう。
ご覧いただきありがとうございます。
コメント