Java基礎(chǔ)教程之接口的繼承與抽象類(lèi)
在實(shí)施接口中,我們利用interface語(yǔ)法,將interface從類(lèi)定義中獨(dú)立出來(lái),構(gòu)成一個(gè)主體。interface為類(lèi)提供了接口規(guī)范。
在繼承中,我們?yōu)榱颂岣叱绦虻目蓮?fù)用性,引入的繼承機(jī)制。當(dāng)時(shí)的繼承是基于類(lèi)的。interface接口同樣可以繼承,以拓展原interface。
接口繼承
接口繼承(inheritance)與類(lèi)繼承很類(lèi)似,就是以被繼承的interface為基礎(chǔ),增添新增的接口方法原型。比如,我們以Cup作為原interface:
interface Cup {
void addWater(int w);
void drinkWater(int w);
}
我們?cè)诶^承Cup的基礎(chǔ)上,定義一個(gè)新的有刻度的杯子的接口,MetricCup
接口如下:
interface MetricCup extends Cup
{
int WaterContent();
}
我們?cè)鎏砹艘粋€(gè)新的方法原型WaterContent(),這個(gè)方法返回一個(gè)整數(shù)(水量)。
interface的多重繼承
在Java類(lèi)的繼承中,一個(gè)衍生類(lèi)只能有一個(gè)基類(lèi)。也就是說(shuō),一個(gè)類(lèi)不能同時(shí)繼承多于一個(gè)的類(lèi)。在Java中,interface可以同時(shí)繼承多于一個(gè)interface,這叫做多重繼承(multiple inheritance)。
比如我們有下面一個(gè)Player接口:
interface Player
{
void play();
}
我們新增一個(gè)MusicCup的接口。它既有Cup接口,又有Player接口,并增加一個(gè)display()方法原型。
interface MusicCup extends Cup, Player
{
void display();
}
(如何使用interface,見(jiàn)實(shí)施接口)
抽象類(lèi)
在生活中,我們會(huì)有一些很抽象的概念。這些抽象的概念往往是許多類(lèi)的集合,比如:
1.糧食 (可以是玉米、小麥、大米)
2.圖形 (可以是三角形、圓形、正方形)
再比如,我們之前舉出了例子:
1.人類(lèi) (可以是男人、女人)
在組織這樣的關(guān)系時(shí),我們可以使用繼承,比如:
根據(jù)我們的常識(shí):
1."Food類(lèi)的對(duì)象"的說(shuō)法是抽象的。這樣一個(gè)對(duì)象應(yīng)該是屬于Corn, Rice, Wheat子類(lèi)中的一個(gè)。
2.Food類(lèi)有eat()方法 (食物可以吃)。然而,這樣的一個(gè)動(dòng)作是抽象的。糧食的具體吃法是不同的。比如Corn需要?jiǎng)兤こ?,Wheat要磨成面粉吃。我們需要在每個(gè)類(lèi)中覆蓋Food類(lèi)的eat()方法。
抽象與具體
Java中提供了抽象類(lèi)(abstract class)的語(yǔ)法,用于說(shuō)明類(lèi)及其方法的抽象性。比如:
abstract class Food {
public abstract void eat();
public void happyFood();
{
System.out.println("Good! Eat Me!");
}
}
類(lèi)中的方法可以聲明為abstract,比如上面的eat()。這時(shí),我們不需要具體定義方法,只需要提供該方法的原型。這與接口類(lèi)似。當(dāng)我們?cè)诒热鏑orn類(lèi)中繼承該類(lèi)時(shí),需要提供eat()方法的具體定義。
類(lèi)中的另一個(gè)方法happyFood()并不是
當(dāng)一個(gè)類(lèi)中出現(xiàn)abstract方法時(shí),這個(gè)類(lèi)的聲明必須加上abstract關(guān)鍵字,否則Java將報(bào)錯(cuò)。一個(gè)abstract類(lèi)不能用于創(chuàng)建對(duì)象。
抽象類(lèi)的繼承
我們可以像繼承類(lèi)那樣繼承一個(gè)抽象類(lèi)。我們必須用完整的方法定義,來(lái)覆蓋抽象類(lèi)中的抽象方法,否則,衍生類(lèi)依然是一個(gè)抽象類(lèi)。
抽象類(lèi)的定義中可以有數(shù)據(jù)成員。數(shù)據(jù)成員的繼承與正常類(lèi)的繼承相同。
總結(jié)
interface繼承,多重繼承
abstract method, abstract類(lèi)
- Java接口和抽象類(lèi)用法實(shí)例總結(jié)
- Java中接口和抽象類(lèi)的區(qū)別與相同之處
- java中抽象類(lèi)、抽象方法、接口與實(shí)現(xiàn)接口實(shí)例詳解
- Java基礎(chǔ)篇_有關(guān)接口和抽象類(lèi)的幾道練習(xí)題(分享)
- JAVA 繼承基本類(lèi)、抽象類(lèi)、接口介紹
- java 抽象類(lèi)與接口的區(qū)別總結(jié)
- 詳細(xì)解析Java中抽象類(lèi)和接口的區(qū)別
- 淺談Java抽象類(lèi)和接口的個(gè)人理解
- 深入淺出分析Java抽象類(lèi)和接口【功能,定義,用法,區(qū)別】
- 細(xì)數(shù)Java接口的概念、分類(lèi)及與抽象類(lèi)的區(qū)別
- java抽象類(lèi)和接口定義與用法詳解
相關(guān)文章
Java實(shí)現(xiàn)ATM系統(tǒng)超全面步驟解讀建議收藏
這篇文章主要為大家詳細(xì)介紹了用Java實(shí)現(xiàn)簡(jiǎn)單ATM機(jī)功能,文中實(shí)現(xiàn)流程寫(xiě)的非常清晰全面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03ehcache開(kāi)源緩存框架_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Ehcache是現(xiàn)在最流行的純Java開(kāi)源緩存框架,這篇文章主要介紹了ehcache框架的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07springboot實(shí)現(xiàn)異步任務(wù)
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)異步任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05swagger注解@ApiModelProperty失效情況的解決
這篇文章主要介紹了swagger注解@ApiModelProperty失效情況的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室示例
這篇文章主要介紹了Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室,結(jié)合實(shí)例形式詳細(xì)分析了java基于TCP協(xié)議的Socket聊天室客戶端與服務(wù)器端相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2018-01-01java 出現(xiàn)問(wèn)題javax.servlet.http.HttpServlet was not found解決方法
這篇文章主要介紹了java 出現(xiàn)問(wèn)題javax.servlet.http.HttpServlet was not found解決方法的相關(guān)資料,需要的朋友可以參考下2016-11-11Spring @ComponentScan注解使用案例詳細(xì)講解
@ComponentScan注解的作用可以簡(jiǎn)述為:將項(xiàng)目中所有被@Component注解直接或者間接標(biāo)記的類(lèi)---->組裝成BeanDefinition---->然后以key=beanName, value=BeanDefinition的形式存儲(chǔ),為后續(xù)生成bean對(duì)象做準(zhǔn)備2023-03-03