Java基礎(chǔ)教程之接口的繼承與抽象類
在實(shí)施接口中,我們利用interface語法,將interface從類定義中獨(dú)立出來,構(gòu)成一個(gè)主體。interface為類提供了接口規(guī)范。
在繼承中,我們?yōu)榱颂岣叱绦虻目蓮?fù)用性,引入的繼承機(jī)制。當(dāng)時(shí)的繼承是基于類的。interface接口同樣可以繼承,以拓展原interface。
接口繼承
接口繼承(inheritance)與類繼承很類似,就是以被繼承的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類的繼承中,一個(gè)衍生類只能有一個(gè)基類。也就是說,一個(gè)類不能同時(shí)繼承多于一個(gè)的類。在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,見實(shí)施接口)
抽象類
在生活中,我們會(huì)有一些很抽象的概念。這些抽象的概念往往是許多類的集合,比如:
1.糧食 (可以是玉米、小麥、大米)
2.圖形 (可以是三角形、圓形、正方形)
再比如,我們之前舉出了例子:
1.人類 (可以是男人、女人)
在組織這樣的關(guān)系時(shí),我們可以使用繼承,比如:

根據(jù)我們的常識(shí):
1."Food類的對(duì)象"的說法是抽象的。這樣一個(gè)對(duì)象應(yīng)該是屬于Corn, Rice, Wheat子類中的一個(gè)。
2.Food類有eat()方法 (食物可以吃)。然而,這樣的一個(gè)動(dòng)作是抽象的。糧食的具體吃法是不同的。比如Corn需要?jiǎng)兤こ裕琖heat要磨成面粉吃。我們需要在每個(gè)類中覆蓋Food類的eat()方法。

抽象與具體
Java中提供了抽象類(abstract class)的語法,用于說明類及其方法的抽象性。比如:
abstract class Food {
public abstract void eat();
public void happyFood();
{
System.out.println("Good! Eat Me!");
}
}
類中的方法可以聲明為abstract,比如上面的eat()。這時(shí),我們不需要具體定義方法,只需要提供該方法的原型。這與接口類似。當(dāng)我們?cè)诒热鏑orn類中繼承該類時(shí),需要提供eat()方法的具體定義。
類中的另一個(gè)方法happyFood()并不是
當(dāng)一個(gè)類中出現(xiàn)abstract方法時(shí),這個(gè)類的聲明必須加上abstract關(guān)鍵字,否則Java將報(bào)錯(cuò)。一個(gè)abstract類不能用于創(chuàng)建對(duì)象。
抽象類的繼承
我們可以像繼承類那樣繼承一個(gè)抽象類。我們必須用完整的方法定義,來覆蓋抽象類中的抽象方法,否則,衍生類依然是一個(gè)抽象類。
抽象類的定義中可以有數(shù)據(jù)成員。數(shù)據(jù)成員的繼承與正常類的繼承相同。
總結(jié)
interface繼承,多重繼承
abstract method, abstract類
相關(guān)文章
Java HashTable的原理與實(shí)現(xiàn)
Java中的HashTable是一種線程安全的哈希表實(shí)現(xiàn),它可以高效地存儲(chǔ)和快速查找數(shù)據(jù),本文將介紹Java中的HashTable的實(shí)現(xiàn)原理、常用方法和測(cè)試用例,需要的小伙伴可以參考一下2023-09-09
Spring?中?PageHelper?不生效問題及解決方法
這篇文章主要介紹了Spring?中?PageHelper?不生效問題,使用這個(gè)插件時(shí)要注意版本的問題,不同的版本可能 PageHelper 不會(huì)生效,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
在MyBatis-Plus中關(guān)閉SQL日志輸出的方法
在使用MyBatis-Plus開發(fā)Java應(yīng)用程序時(shí),隨著項(xiàng)目的復(fù)雜性提升,SQL日志的輸出可能會(huì)導(dǎo)致日志文件變得龐大,影響系統(tǒng)的性能和可維護(hù)性,本文將介紹如何在Spring Boot項(xiàng)目中關(guān)閉MyBatis-Plus的SQL日志輸出,感興趣的朋友一起看看吧2025-04-04

