Javaのabstractって何?抽象クラスの基本的な使い方をサンプルコードで解説!
  • facebookページ
  • twitterページ
  • 2020.01.06

    Javaのabstractって何?抽象クラスの基本的な使い方をサンプルコードで解説!

    Javaプログラムで、ある程度の開発規模になると必ず見かけることになるのが「abstract」で宣言される抽象クラスです。

    abstractの存在や抽象クラスという名前は知っていても意味や使い方を理解していない方も多いのが実情です。

    本記事では、Javaプログラマーの方向けにabstract(抽象クラス)の基本的な考え方と使い方をサンプルコードを交えてご紹介していきます。

    Javaのabstractとは

    Javaでabstractは抽象クラスや抽象メソッドを定義する際に使用する修飾子です。

    抽象クラスや抽象メソッドでは「具体的な処理が未定義」の状態で作成されるのが特徴です。

    abstractはアクセス修飾子の1つ

    abstractはpublicやprivate、protectといったアクセス修飾子の1つで下記のように記述されます。

    抽象クラスはabstractをアクセス修飾子として宣言したクラスで、抽象メソッドを1つ以上持ちます。

    ポテパンダの一言メモ

    抽象メソッドとは処理内容を記述せず、abstractで宣言されたメソッドです。

    抽象クラス・メソッドは継承したサブクラスで具体的な処理内容を記述する

    抽象クラス・メソッドは上述した通り、具体的な処理が未定義の状態であるため、サブクラスにおいて処理内容を確定してあげる必要があります。

    抽象クラスはサブクラス(子クラス)に継承されるスーパークラス(親クラス)となることが前提のクラスであり、抽象メソッドはオーバーライドされることが前提の継承元メソッドとなります。

    抽象クラスは何のために定義するの?

    Javaのabstract(抽象クラス)について基本的な文法や使い方を説明してきましたが、根本的に何のために定義するのでしょうか?

    最も大きな理由としては、クラス設計におけるルールを仕様書レベルではなく、実装レベルで強制するために定義することです。

    まず個別の処理において、ロジックは少し違うけれども似たような内容の処理を各クラスで実装することはよくあります。

    抽象クラスを利用することで、複数人で開発を行う際にメソッド名やロジックをある程度統一することが出来るため、ひと目見た際にどういった処理が行われているかを把握しやすくなります。

    またサブクラスでは抽象クラスで定義された抽象メソッドを必ず実装する必要がありますし、メソッド名を勝手に変更することも出来ません。

    ルールを守らないとコンパイルエラーとなり、プログラム作成が出来ないことから、実装レベルでの強制力を持ったルール作りとしても役立ちます。

    Javaでabstractを利用する際の注意点

    Javaでabstractを利用する際に注意すべき点は大きく2つあります。

    abstractで定義した抽象クラスはインスタンス化出来ない

    abstractで定義した抽象クラスは他のクラスから直接インスタンス化することは出来ません。
    必ずサブクラスでextends(継承)して利用する必要があります。

    下記のサンプルコードでは抽象クラスとして定義したクラスをnew演算子でインスタンス化しようと試みています。

    サンプルコードをコンパイルしようとすると下記の画像のようにコンパイルエラーとなることがご確認頂けます。

    抽象クラスで定義した抽象メソッドは全てサブクラスで定義する必要がある

    抽象クラスではまだ処理が確定していない抽象メソッドを記述していますが、サブクラスで利用する予定のない抽象メソッドもサブクラス内で定義しておく必要があります。

    次のサンプルコードは抽象クラスに複数の抽象メソッドがある状態で、サブクラスで自分の利用する抽象メソッドしか定義しなかった場合の例となります。

    SampleクラスでAbstractSampleを継承して「abstractMethod1」のみを実装しました。

    コンパイルした結果が下記の画像となります。

    「abstractMethod2」が継承クラスで実装されていないためコンパイルエラーとなることをご確認頂けます。

    Javaでabstractを利用したサンプルコードを確認して理解を深めよう

    実際にJavaプログラムでabstractを利用したサンプルコードを掲載します。

    今回はCarという抽象クラスを作成し、サブクラスで2種類の車を定義していきたいと思います。

    実行した結果は下記の通りとなります。

    今回のサンプルでは抽象メソッドである「carSpec」と具象メソッドと呼ばれる、処理が記述された「commonSpec」という2つのメソッドを抽象クラス「Car」に定義しました。

    サブクラスには「commonSpec」メソッドを定義していませんが、抽象クラスに記述したコードが実行されていることがご確認頂けます。

    また、抽象メソッドである「carSpec」ではそれぞれサブクラスで記述した異なる処理が実行されていることがわかります。

    サンプルコードはあくまで一例ですが、共通処理は1つのクラスにまとめ、サブクラスで処理を上書きしたいメソッドを抽象メソッドとして定義しておくことで可読性の高いコードを作成することが可能です。

    さいごに:Javaのabstractを上手く使うためにはクラス設計を理解する

    本記事では、Javaのabstract(抽象クラス)について基本的な考え方や使い方をサンプルコードを交えながらご紹介してきました。

    abstractは利用しなくてもプログラムを組めるため、あまり詳しく理解していない方が多いのも現状です。
    しかしクラス設計を理解しabstractを上手く利用することで、大規模開発でも煩雑な実装とならずにまとまりのあるシステムが構築可能となります。

    一つ上のレベルのJavaプログラマーとなるためにabstract(抽象クラス)の活用法はしっかりと学習しておきましょう。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE

    ポテパンおすすめ案件