Javaプログラミング、インタフェースと抽象クラスと具象クラスの違い

Javaプログラミングにおける、インタフェースと抽象クラスと具象クラスの違いって、何がありますか?

それぞれの違いについて、「メソッドの宣言」と「メソッドの実装」に色を付けて比較しています。

「メソッドの宣言」または「メソッドの実装」において、個数に違いがあります。
例えば具象クラスは、クラス的に見ると「完成された物という感じ」がします。

Javaプログラミング、インタフェースと抽象クラスと具象クラス、それぞれの違い

Javaプログラミングにおける、

  • インタフェース
  • 抽象クラス
  • 具象クラス

これらについて、

  • 「メソッドの宣言」の部分
  • 「メソッドの実装」の部分

この部分に色を付けて「違い」を比較してみます。

「メソッドの宣言」を赤色、「メソッドの実装」を水色にします。

それらの「違い」を理解するのに、役立てば幸いです。

インタフェースOpenの例

以下、インタフェースの例を書きます。プログラムの詳細を理解する必要は、ありません。

public interface Open{
    public void open();
}

抽象クラスAbstractOpenActionの例

以下、抽象クラスの例を書きます。プログラムの詳細を理解する必要は、ありません。

public abstract class AbstractOpenAction extends Action {

    public abstract ActionForward open(ActionMapping mapping, OpenForm form,
    HttpServletRequest request, HttpServletResponse response);

    public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {

        OpenForm openForm = (OpenForm)form;
        String action = openForm.getAction();

        ……

    }

    ……

}

具象クラスOpenActionの例

以下、具象クラスの例を書きます。プログラムの詳細を理解する必要は、ありません。

public class OpenAction extends AbstractOpenAction {

    public ActionForward open(ActionMapping mapping, OpenForm form,
    HttpServletRequest request, HttpServletResponse response) {

        ServletContext context = super.getServlet().getServletContext();
        XmlTimesheetManager timesheetManager = 
            (XmlTimesheetManager)context.getAttribute("timesheetManager");

        ……

    }
Javaプログラミング
Javaプログラミング・イメージ画像

Javaプログラミング、インタフェースと抽象クラスと具象クラス、違いのイメージ

Javaプログラミングにおける、

  • インタフェースOpen
  • 抽象クラスAbstractOpenAction
  • 具象クラスOpenAction

これらについて、上記の色を使って比較すると次のようなイメージになります。

インタフェース Open抽象クラス AbstractOpenAction具象クラス OpenAction
open()open()open()
  open { … }
 execute() 
 execute { … } 

インタフェースOpenは、赤色だけ(メソッドの宣言だけ)があります。

抽象クラスAbstractOpenActionは、赤色(メソッドの宣言)と水色(メソッドの実装)があります。

赤色(メソッドの宣言)の個数が、水色(メソッドの実装)の個数より多いです。

具象クラスOpenActionは、赤色(メソッドの宣言)と水色(メソッドの実装)があります。

赤色(メソッドの宣言)の個数と、水色(メソッドの実装)の個数は、同じです。

赤色水色というイメージを見ることで、

  • インタフェース
  • 抽象クラス
  • 具象クラス

これらの「違い」について、何となく理解できたら良いと思います。

インタフェースには「メソッドの宣言」だけあって、「メソッドの実装」はないです。

クラス的に見ると、「空っぽという感じ」がします。

抽象クラスについては、インタフェースと具象クラスの「中間に存在するクラスという感じ」がします。

具象クラスは、「メソッドの宣言」に対応する「メソッドの実装」が必ず存在しています。

クラス的に見ると、「完成された物という感じ」がします。

※この記事は、2004年10月当時の記事になります。

【まとめ記事】Javaアプリの品質を保つため、Javaソースコードを書くための工夫

Javaソースコードを正しく書くための、ちょっとした工夫について、ご紹介しています。 変数の寿命を限定する書き方。 肯定的な条件を優先して条件分岐する書き方。 クラス…