空话少说 解析java抽象类与接口的差别
添加时间:2013-7-2 点击量:
抽象类(abstract):
人们熟悉事物的时辰,会把具有雷同特点和行动的事物归为一个抽象类。用abstract润饰,abstract可以润饰办法也可以润饰类,分别叫做抽象办法和抽象类。
特点:
1. 有抽象办法的类必然是抽象类,然则抽象类中不必然都是抽象办法,也可以有具体办法。
2. 抽象类的第一个非抽象子类必必要实现其父类所有的抽象办法,此中也包含了父类持续的抽象办法。
接口:
接口是一种特别的抽象类。implements实现接口中的办法。
接口编程的原则:
1. 能用接口就用接口
2. 用若干个小接口庖代一个大接口
差别:
语法差别:
1.抽象类有机关办法,接口中不克不及有
2. 抽象类有通俗成员变量,接口中没有
3. 抽象类可以有非抽象办法,接口中不克不及有
4. 抽象类可以用public、protected,接口中之能是public(默认为public)
5. 抽象类包含静态办法,接口中没有
6. 接口中的变量只能是public static final,抽象类中可所以随便率性类型润饰
7. 一个类可以实现多个接口,然则只能持续一个抽象类。
应用上的差别:
接口更多的是在体系设计上阐扬感化,首要用于定义模块之间的通信契约。
抽象类在代码实现方面阐扬感化,可以实现代码重写。
例子:假如项目所有的Servlet类都要用雷同的体式格式进行权限断定、记录接见日记和异常处理惩罚,那么就可以定义一个抽象基类,在抽象堆集的service办法中完成权限断定、记录接见日记、异常处理惩罚的代码,各个子类完成各自营业逻辑
public abstract class BaseServlet {
public final void service () throws IOExcetion,ServletException{
记录接见日记
权限断定
if(具有权限){
try{
doService();
}catch(Excetpion e){
记录异常信息
}
}
}
protected abstract void doService() throws IOExcetion,ServletException;//重视接见权限制义成protected,显得既专业,又严谨,因为他是专门给子类用的
}
public class MyServlet1 extends BaseServlet{
protected void doService(){
本Servlet只处理惩罚具体营业逻辑代码
}
}
【迎接吐槽!!!】
彼此相爱,却不要让爱成了束缚:不如让它成为涌动的大海,两岸乃是你们的灵魂。互斟满杯,却不要同饮一杯。相赠面包,却不要共食一个。一起歌舞欢喜,却依然各自独立,相互交心,却不是让对方收藏。因为唯有生命之手,方能收容你们的心。站在一起却不要过于靠近。—— 纪伯伦《先知》
抽象类(abstract):
人们熟悉事物的时辰,会把具有雷同特点和行动的事物归为一个抽象类。用abstract润饰,abstract可以润饰办法也可以润饰类,分别叫做抽象办法和抽象类。
特点:
1. 有抽象办法的类必然是抽象类,然则抽象类中不必然都是抽象办法,也可以有具体办法。
2. 抽象类的第一个非抽象子类必必要实现其父类所有的抽象办法,此中也包含了父类持续的抽象办法。
接口:
接口是一种特别的抽象类。implements实现接口中的办法。
接口编程的原则:
1. 能用接口就用接口
2. 用若干个小接口庖代一个大接口
差别:
语法差别:
1.抽象类有机关办法,接口中不克不及有
2. 抽象类有通俗成员变量,接口中没有
3. 抽象类可以有非抽象办法,接口中不克不及有
4. 抽象类可以用public、protected,接口中之能是public(默认为public)
5. 抽象类包含静态办法,接口中没有
6. 接口中的变量只能是public static final,抽象类中可所以随便率性类型润饰
7. 一个类可以实现多个接口,然则只能持续一个抽象类。
应用上的差别:
接口更多的是在体系设计上阐扬感化,首要用于定义模块之间的通信契约。
抽象类在代码实现方面阐扬感化,可以实现代码重写。
例子:假如项目所有的Servlet类都要用雷同的体式格式进行权限断定、记录接见日记和异常处理惩罚,那么就可以定义一个抽象基类,在抽象堆集的service办法中完成权限断定、记录接见日记、异常处理惩罚的代码,各个子类完成各自营业逻辑
public abstract class BaseServlet {
public final void service () throws IOExcetion,ServletException{
记录接见日记
权限断定
if(具有权限){
try{
doService();
}catch(Excetpion e){
记录异常信息
}
}
}
protected abstract void doService() throws IOExcetion,ServletException;//重视接见权限制义成protected,显得既专业,又严谨,因为他是专门给子类用的
}
public class MyServlet1 extends BaseServlet{
protected void doService(){
本Servlet只处理惩罚具体营业逻辑代码
}
}
【迎接吐槽!!!】
彼此相爱,却不要让爱成了束缚:不如让它成为涌动的大海,两岸乃是你们的灵魂。互斟满杯,却不要同饮一杯。相赠面包,却不要共食一个。一起歌舞欢喜,却依然各自独立,相互交心,却不是让对方收藏。因为唯有生命之手,方能收容你们的心。站在一起却不要过于靠近。—— 纪伯伦《先知》