天天看點

abstract class 和 interface 的差別

1、interface中隻能包含靜态常量和抽象方法,且靜态常量是public  final static 的,抽象方法是 public abstract 的。

2、abstract class 除了能包含 interface 所能包含的東西外,還能包含具體類能包含的任何東西。

3、抽象類可以實作接口,抽象類可以繼承抽象類,抽象類可以繼承具體類,接口可以繼承接口。

4、接口主要用于系統架構的設計,用來定義子產品直接的通信接口。而抽象類可以用來實作代碼重用。設計模式中的模版方法模式就利用了抽象類。假如在項目中有多個Servlet中都要進行權限判斷、日志記錄等相同操作,就可以頂一個抽象類,在抽象類中就可以采用模版方法模式定義一個具體方法,在該具體方法中實作這個相同操作,同時定義一個抽象方法以供子類實作自己特有的操作。僞代碼如下:

public abstract class BaseServlet extends HttpServlet{
	protected final void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
		日志記錄;
		權限判斷
		if(有權限){
			doService(request,response);
		}else{
			//提示權限不足
		}
	}
	
	protected abstract void doService(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException;
}           

這裡如果用接口就不能實作了。

繼續閱讀