更新時(shí)間:2020-08-19 16:19:58 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2705次
很多常見(jiàn)的面試題都會(huì)出諸如抽象類(lèi)和接口有什么區(qū)別,什么情況下會(huì)使用抽象類(lèi)和什么情況你會(huì)使用接口這樣的問(wèn)題。本文我們將仔細(xì)討論這些話(huà)題。
在討論它們之間的不同點(diǎn)之前,我們先看看抽象類(lèi)、接口各自的特性。
Java抽象類(lèi)
抽象類(lèi)是用來(lái)捕捉子類(lèi)的通用特性的。它不能被實(shí)例化,只能被用作子類(lèi)的超類(lèi)。抽象類(lèi)是被用來(lái)創(chuàng)建繼承層級(jí)里子類(lèi)的模板。以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類(lèi)繼承GenericServlet時(shí),它提供了service方法的實(shí)現(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接口
接口是抽象方法的集合。如果一個(gè)類(lèi)實(shí)現(xiàn)了某個(gè)接口,那么它就繼承了這個(gè)接口的抽象方法。這就像契約模式,如果實(shí)現(xiàn)了這個(gè)接口,那么就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情。以Externalizable接口為例:
public?interface?Externalizable?extends?Serializable?{?
????void?writeExternal(ObjectOutput?out)?throws?IOException;?
????void?readExternal(ObjectInput?in)?throws?IOException,?ClassNotFoundException;
}
當(dāng)你實(shí)現(xiàn)這個(gè)接口時(shí),你就需要實(shí)現(xiàn)上面的兩個(gè)方法:
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);
????}
}
抽象類(lèi)和接口的對(duì)比

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java抽象類(lèi)與接口有哪些區(qū)別呢”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)