オーダーメイドコース
icon
icon

抽象クラスを扱う!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修飾子を使った抽象クラス、抽象メソッドについての説明だよ。

大石ゆかり

具象クラスそれぞれの基本、元になるものといったイメージでしょうか。

田島悠介

上の例で言うと「図形」がそれにあたるね。同じような抽象クラスとその具象クラスの例を、コードで実際に書いてみようか。

[PR] 未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

抽象クラス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アプリケーションや、基幹システム用バッチアプリケーションなどの設計構築試験。