如果一個(gè)類中沒有包含足夠的信息來描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類。
抽象類除了不能實(shí)例化對(duì)象之外,類的其它功能依然存在,成員變量、成員方法和構(gòu)造方法的訪問方式和普通類一樣。
由于抽象類不能實(shí)例化對(duì)象,所以抽象類必須被繼承,才能被使用。
在java語(yǔ)言中使用abstract class來定義抽象類。
抽象方法
如果你想設(shè)計(jì)這樣一個(gè)類,該類包含一個(gè)特別的成員方法,該方法的具體實(shí)現(xiàn)由它的子類確定,那么你可以在父類中聲明該方法為抽象方法。
Abstract關(guān)鍵字同樣可以用來聲明抽象方法,抽象方法只包含一個(gè)方法名,而沒有方法體。
抽象方法沒有定義,方法名后面直接跟一個(gè)分號(hào),而不是花括號(hào)。
聲明抽象方法會(huì)造成以下兩個(gè)結(jié)果:
如果一個(gè)類包含抽象方法,那么該類必須是抽象類。
任何子類必須重寫父類的抽象方法,或者聲明自身為抽象類。繼承抽象方法的子類必須重載該方法。否則,該子類也必須聲明為抽象類。最終,必須有子類實(shí)現(xiàn)該抽象方法,否則,從最初的父類到最終的子類都不能用來實(shí)例化對(duì)象。
接口(英文:Interface),在JAVA編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個(gè)類通過繼承接口的方式,從而來繼承接口的抽象方法。
接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對(duì)象的屬性和方法。接口則包含類要實(shí)現(xiàn)的方法。
接口無(wú)法被實(shí)例化,但是可以被實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)接口的類,必須實(shí)現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在Java中,接口類型可用來聲明一個(gè)變量,他們可以成為一個(gè)空指針,或是被綁定在一個(gè)以此接口實(shí)現(xiàn)的對(duì)象。
接口與類相似點(diǎn):
一個(gè)接口可以有多個(gè)方法。
接口文件保存在.java結(jié)尾的文件中,文件名使用接口名。
接口的字節(jié)碼文件保存在.class結(jié)尾的文件中。
接口相應(yīng)的字節(jié)碼文件必須在與包名稱相匹配的目錄結(jié)構(gòu)中。
接口與類的區(qū)別:
接口不能用于實(shí)例化對(duì)象。
接口沒有構(gòu)造方法。
接口中所有的方法必須是抽象方法。
接口不能包含成員變量,除了static和final變量。
接口不是被類繼承了,而是要被類實(shí)現(xiàn)。
接口支持多重繼承。
接口的聲明
接口的聲明語(yǔ)法格式如下:
[可見度] interface 接口名稱 [extends 其他的類名] { // 聲明變量 // 抽象方法}Interface關(guān)鍵字用來聲明一個(gè)接口。下面是接口聲明的一個(gè)簡(jiǎn)單例子。
/* 文件名 :NameOfInterface.java */import java.lang.*;//引入包 public interface NameOfInterface{ //任何類型 final, static 字段 //抽象方法}接口有以下特性:
接口是隱式抽象的,當(dāng)聲明一個(gè)接口的時(shí)候,不必使用abstract關(guān)鍵字。
接口中每一個(gè)方法也是隱式抽象的,聲明時(shí)同樣不需要abstract關(guān)鍵子。
接口中的方法都是公有的。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注