archive

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