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で抽象クラス、抽象メソッドを作成する時に用います。

オブジェクト指向プログラミングで、共通の性質を持つクラスをまとめるために用います。

例えば、図形描画アプリケーションで、円、長方形、三角形といったクラスを扱うとします。

これらクラスは「クラス間で共通の性質」と「クラス間で異なる性質」を持ちます。

  • 座標、向き、色といった状態
  • 移動、回転、拡大縮小といった動作
1時間でできる無料体験!

抽象クラス「図形」で共通の性質や動作を定義します。
逆に種別ごとに異なるものを抽象メソッドとし、実装せずに残しておきます。

具象クラス「円」「長方形」「三角形」で、種別ごとに異なるものを具象メソッドとして実装します。

このような階層化により、プログラムの保守性が向上します。

 

抽象クラス、抽象メソッドの書き方

以下のようにクラス名、メソッド名の前に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] Javaプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する