抽象クラスを扱う!Javaでabstractを使う方法【初心者向け】
初心者向けにJavaでabstractを使う方法について詳しく解説しています。抽象クラスや抽象メソッドを作成する際に使います。サンプルプログラムを書きながら説明しているので、実際に書きながら理解していきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
この記事では、Javaでabstractを使う方法について解説しています。
抽象クラス、メソッドを作成する際に便利なので、クラスをまとめる際にぜひ参考にしてみてください。
なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。
今回はabstract修飾子を使ってみよう。
田島メンター!abstract修飾子というのは何ですか~?
これは抽象クラスと抽象メソッドを定義するときに使うものなんだ。まずは、このふたつがどういうものかというところから見ていこう。
お願いします!
abstractとは
abstractとは、Javaで抽象クラス、抽象メソッドを作成する時に用います。
オブジェクト指向プログラミングで、共通の性質を持つクラスをまとめるために用います。
例えば、図形描画アプリケーションで、円、長方形、三角形といったクラスを扱うとします。
これらクラスは「クラス間で共通の性質」と「クラス間で異なる性質」を持ちます。
- 座標、向き、色といった状態
- 移動、回転、拡大縮小といった動作
抽象クラス「図形」で共通の性質や動作を定義します。
逆に種別ごとに異なるものを抽象メソッドとし、実装せずに残しておきます。
具象クラス「円」「長方形」「三角形」で、種別ごとに異なるものを具象メソッドとして実装します。
このような階層化により、プログラムの保守性が向上します。
抽象クラス、抽象メソッドの書き方
以下のようにクラス名、メソッド名の前にabstractキーワードを記述します。
abstract class AbstractClass { abstract public void method(); } class ConcreteClass extends AbstractClass{ public void method(){ // 実装内容 } }
抽象クラスの抽象メソッドは宣言のみ行います。処理の中身を記述しません。
具象クラスでメソッドの中身を記述します。
抽象クラスはインスタンス化できません。
AbstractClass c = new AbstractClass(); // コンパイルエラー AbstractClass c = new ConcreteClass(); // 可 ConcreteClass c = new ConcreteClass(); // 可
abstract修飾子を使った抽象クラス、抽象メソッドについての説明だよ。
具象クラスそれぞれの基本、元になるものといったイメージでしょうか。
上の例で言うと「図形」がそれにあたるね。同じような抽象クラスとその具象クラスの例を、コードで実際に書いてみようか。
実際に書いてみよう
抽象クラス1つと、それを継承する具象クラス2つを作成します。
抽象クラスで実装したメソッドにより、動作が変化することを確認しましょう。
ソースコード
public class AbstractDemo { public static void main(String[] args) { // Catクラスをインスタンス化する Animal cat = new Cat(); cat.animalCry(); // Dogクラスをインスタンス化する Animal dog = new Dog(); dog.animalCry(); } } // 抽象クラス abstract class Animal { private String name; public Animal(String name) { this.name = name; } public void animalCry() { System.out.println(name + "の鳴き方: " + cry()); } // 抽象メソッド // 具象クラスからのみアクセスするため、protected修飾とする abstract protected String cry(); } // 具象クラス 1つ目 class Cat extends Animal { public Cat() { super("猫"); } // メソッドを実装する protected String cry() { return "ニャー"; } } //具象クラス 2つ目 class Dog extends Animal { public Dog() { super("犬"); } // メソッドを実装する protected String cry() { return "ワン"; } }
実行結果
猫の鳴き方: ニャー 犬の鳴き方: ワン
解説
抽象クラスAnimalを作成し、cryメソッドを抽象メソッドとします。
具象クラスCatを作成し、Animalクラスを継承します。
続いてcryメソッドを実装し、同様に具象クラスDogを作成します。
Catクラス、Dogクラスのインスタンスを作成し、animalCryメソッドを呼びます。
次に具象メソッドの実装に従い、インスタンスの動作が変化します。
ただ、Animalクラスをインスタンス化できないことに注意しておきましょう。
以上、abstractの使い方を解説しました。
入門向けJavaの学習サイトもまとめているので、合わせてご覧ください。
抽象クラスを扱った書き方の例を見てみたよ。
ここでは「動物」という抽象クラスから「犬」「猫」という具象クラスを生成したわけですね。
抽象クラスはインスタンス化できないことと、メソッドは必ずオーバーライドしないといけないことを覚えておこう。
分かりました。ありがとうございます!
また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。
JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。
この記事を監修してくれた方
橋本紘希(はしもとこうき) 開発実績: Javaプログラムを用いた業務用Webアプリケーションや、基幹システム用バッチアプリケーションなどの設計構築試験。 |