インタフェースと抽象クラスと具象クラス・Javaソースコードの書き方

インタフェースと抽象クラスと具象クラスの違い

樹形図

クラス継承のイメージ画像

インタフェース・抽象クラス・具象クラスについて、
「メソッドの宣言」と「メソッドの実装」の部分に色を付けて、「違い」をイメージで比較してみます。それらの「違い」を理解するのに、役立てば幸いです。

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

インタフェースの例

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

public interface Open{
    public void open();
}

抽象クラスの例

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

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();

        ……

    }

    ……

}

具象クラスの例

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

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");

        ……

    }

それぞれの「違い」のイメージ

インタフェース Open、抽象クラス AbstractOpenAction 、具象クラス OpenAction について、上記の色を使って比較すると次のようなイメージになります。

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

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

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

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

赤色水色というイメージを見ることで、インタフェース・抽象クラス・具象クラスの「違い」について、何となく理解できたら良いと思います。
例えば抽象クラスについては、インタフェースと具象クラスの「中間に存在するクラスのような感じ」がします。

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