天天看点

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;
}           

这里如果用接口就不能实现了。

继续阅读