很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細討論這些話題。
在討論它們之間的不同點之前,我們先看看抽象類、接口各自的特性。
Java抽象類
抽象類是用來捕捉子類的通用特性的。它不能被實例化,只能被用作子類的超類。抽象類是被用來創(chuàng)建繼承層級里子類的模板。以JDK中的GenericServlet為例:
public?abstract?class?GenericServlet?implements?Servlet,?ServletConfig,?Serializable?{????//?abstract?method????abstract?void?service(ServletRequest?req,?ServletResponse?res);?????void?init()?{????????//?Its?implementation????}????//?other?method?related?to?Servlet}
當(dāng)HttpServlet類繼承GenericServlet時,它提供了service方法的實現(xiàn):
public?class?HttpServlet?extends?GenericServlet?{????void?service(ServletRequest?req,?ServletResponse?res)?{????????//?implementation????}?????protected?void?doGet(HttpServletRequest?req,?HttpServletResponse?resp)?{????????//?Implementation????}?????protected?void?doPost(HttpServletRequest?req,?HttpServletResponse?resp)?{????????//?Implementation????}?????//?some?other?methods?related?to?HttpServlet}
Java接口
接口是抽象方法的集合。如果一個類實現(xiàn)了某個接口,那么它就繼承了這個接口的抽象方法。這就像契約模式,如果實現(xiàn)了這個接口,那么就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情。以Externalizable接口為例:
public?interface?Externalizable?extends?Serializable?{?????void?writeExternal(ObjectOutput?out)?throws?IOException;?????void?readExternal(ObjectInput?in)?throws?IOException,?ClassNotFoundException;}
當(dāng)你實現(xiàn)這個接口時,你就需要實現(xiàn)上面的兩個方法:
public?class?Employee?implements?Externalizable?{?????int?employeeId;????String?employeeName;?????@Override????public?void?readExternal(ObjectInput?in)?throws?IOException,?ClassNotFoundException?{????????employeeId?=?in.readInt();????????employeeName?=?(String)?in.readObject();?????}?????@Override????public?void?writeExternal(ObjectOutput?out)?throws?IOException?{?????????out.writeInt(employeeId);????????out.writeObject(employeeName);????}}
抽象類和接口的對比
以上就是天津卓眾教育java培訓(xùn)機構(gòu)的小編針對“Java抽象類與接口有哪些區(qū)別呢”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。