抽象メソッドについて整理。
継承について基礎知識が必要。継承については下記に別途整理した。
[Java] 継承とは
継承について、シンプルな例を使って整理。
抽象メソッドとは
まだ処理の内容が何も定義されていないメソッド。
書き方は?
特徴としては、
- 最初に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アプリケーションについての記事をまとめた。
-
Javaでwebアプリケーションを作る
ここでは、Javaでのwebアプリケーションの作成についてまとめていく。 そもそもwebアプリケーションとは? そもそもwebアプリケーションとは何か?ウェブサイトとの違いは? 下記にまとめた。 関連記事 ...
続きを見る
コンピューターについての全体像も把握しておくと、プログラミングのさらなる理解に役立つ。
-
コンピューターサイエンスとITの全体像
ITの進化は早く、新しい言葉がどんどん出てきて、情報に追いつくのが難しく感じてしまう。 もしコンピュータサイエンスやITの内容の基礎だったり全体像を把握しておけば、今後新しいITがどんどん出てきても早く吸収していけるので ...
続きを見る