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プログラミングにおける、
- インタフェースOpen
- 抽象クラスAbstractOpenAction
- 具象クラスOpenAction
これらについて、上記の色を使って比較すると次のようなイメージになります。
インタフェース Open | 抽象クラス AbstractOpenAction | 具象クラス OpenAction |
---|---|---|
open() | open() | open() |
open { … } | ||
execute() | ||
execute { … } |
インタフェースOpenは、赤色だけ(メソッドの宣言だけ)があります。
抽象クラスAbstractOpenActionは、赤色(メソッドの宣言)と水色(メソッドの実装)があります。
赤色(メソッドの宣言)の個数が、水色(メソッドの実装)の個数より多いです。
具象クラスOpenActionは、赤色(メソッドの宣言)と水色(メソッドの実装)があります。
赤色(メソッドの宣言)の個数と、水色(メソッドの実装)の個数は、同じです。
赤色と水色というイメージを見ることで、
- インタフェース
- 抽象クラス
- 具象クラス
これらの「違い」について、何となく理解できたら良いと思います。
インタフェースには「メソッドの宣言」だけあって、「メソッドの実装」はないです。
クラス的に見ると、「空っぽという感じ」がします。
抽象クラスについては、インタフェースと具象クラスの「中間に存在するクラスという感じ」がします。
具象クラスは、「メソッドの宣言」に対応する「メソッドの実装」が必ず存在しています。
クラス的に見ると、「完成された物という感じ」がします。
※この記事は、2004年10月当時の記事になります。