[Java / abstract] 抽象メソッドとは

抽象メソッドについて整理。

継承について基礎知識が必要。継承については下記に別途整理した。


抽象メソッドとは

まだ処理の内容が何も定義されていないメソッド。


書き方は?

特徴としては、

  • 最初にabstractをつける
  • 処理内容を定義するための{}を付けない
  • abstractクラスと一緒に使う(abstractメソッドを持ってるのに、クラスの宣言部分でabstractがないとエラー)
abstract void exampleMethod();


どうやって使うの?

abstractメソッドを設定することによって、そのabstractメソッドを設定しているクラスを継承している子クラスでは、abstractメソッドを必ず使うように、強制させることができる。


例を使った説明

まずは親クラスで、abstractを設定する。クラスの宣言部分とメソッド部分でそれぞれabstractをつける。

今回は、goSkiingメソッドをabstractに設定。

Skierクラスで、スキーに行く準備をするメソッドを用意。

//Skier.java

public abstract class skier {
    void prepare(){
        System.out.println("スキーに行く準備をしました。");
    }
    abstract void goSkiing();
}


次に、abstractのルールで、継承する子クラスには必ずgoSkiingメソッドを入れる必要があるので表記する。

Skierのクラスを継承したSkierAとSkierBはそれぞれ異なるスキー場に行くメソッドを用意。

SkierAは舞子スノーリゾートへ。

//SkierA.java

public class SkierA extends Skier {

 //親クラスで設定したabstractメソッドを入れないとエラー 
  void goSkiing() {
        System.out.println("skierAは舞子スノーリゾートに行きました。");
  }
}


SkierBはニセコビレッジスキーリゾートへ。

ここでも同じく、Skierクラスを継承しているので、goSkiingメソッドは必ず記述しなければいけない。(オーバーライドしなければならない)

//SkierB.java

public 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”]