[Java / abstract] 抽象メソッドとは
抽象メソッドについて整理。
継承について基礎知識が必要。継承については下記に別途整理した。
抽象メソッドとは
まだ処理の内容が何も定義されていないメソッド。
書き方は?
特徴としては、
- 最初にabstractをつける
- 処理内容を定義するための{}を付けない
- abstractクラスと一緒に使う(abstractメソッドを持ってるのに、クラスの宣言部分でabstractがないとエラー)
`abstract void exampleMethod();`
どうやって使うの?
abstractメソッドを設定することによって、そのabstractメソッドを設定しているクラスを継承している子クラスでは、abstractメソッドを必ず使うように、強制させることができる。
例を使った説明
まずは親クラスで、abstractを設定する。クラスの宣言部分とメソッド部分でそれぞれabstractをつける。
今回は、goSkiingメソッドをabstractに設定。
Skierクラスで、スキーに行く準備をするメソッドを用意。
`//Skier.javapublic abstract class skier { void prepare(){ System.out.println(“スキーに行く準備をしました。”); } abstract void goSkiing(); }`
次に、abstractのルールで、継承する子クラスには必ずgoSkiingメソッドを入れる必要があるので表記する。
Skierのクラスを継承したSkierAとSkierBはそれぞれ異なるスキー場に行くメソッドを用意。
SkierAは舞子スノーリゾートへ。
`//SkierA.javapublic class SkierA extends Skier {
//親クラスで設定したabstractメソッドを入れないとエラー void goSkiing() { System.out.println(“skierAは舞子スノーリゾートに行きました。”); } }`
SkierBはニセコビレッジスキーリゾートへ。
ここでも同じく、Skierクラスを継承しているので、goSkiingメソッドは必ず記述しなければいけない。(オーバーライドしなければならない)
`//SkierB.javapublic class SkierB extends Skier {
//親クラスで設定したabstractメソッドを入れないとエラー void goSkiing() { System.out.println(“skierBはニセコビレッジスキーリゾートに行きました。”); } }`
Main.javaでそれぞれインスタンスを作って出力する。
`public class Main {
public static void main(String[] args) {
SkierA skierA = new SkierA();
skierA.prepare();
skierA.goSkiing();
SkierB skierB = new SkierB();
skierB.prepare();
skierB.goSkiing();
}
}
//出力結果
スキーに行く準備をしました。
skierAは舞子スノーリゾートに行きました。
スキーに行く準備をしました。
skierBはニセコビレッジスキーリゾートに行きました。`

なぜわざわざabstractを使うのか?
Javaは大規模開発を前提にした言語だと考えると、abstractの意義もわかりやすくなる。
例えば何千とある子クラスを作るとき、もし1人の開発者が子クラスでabstractのメソッドの実装を忘れたり、メソッド名のスペルミスを起こせば、コンパイルエラーを起こしてくれる。
また、メソッド名を統一しなければならない=どのクラスでも大体どんな処理をしているのか、把握しやすくなる。
小規模のプログラムだったら、わざわざabstractを使って縛らなくても良いが、大規模開発になり、ルールを厳格にすることで、よりスムーズに開発が進むという意味で、abstractは使える。
全体像を把握する
下記にJavaやwebアプリケーションについての記事をまとめた。
[st-card myclass="" id=3431 label="" pc_height="" name="" bgcolor="" color="" fontawesome="" readmore=“on”]
コンピューターについての全体像も把握しておくと、プログラミングのさらなる理解に役立つ。
[st-card myclass="" id=4587 label="" pc_height="" name="" bgcolor="" color="" fontawesome="" readmore=“on”]