介面和抽象類的區別

2021-10-10 02:17:33 字數 2176 閱讀 1422

相信有很多的小夥伴會有這樣的疑問????
介面1.8以後的新特性:
全域性常量:public

static

final 資料型別 常量名 = 值

抽象方法:public

abstract 返回值型別 方法名(

)

靜態方法:public

static 返回值型別 方法名(

)

預設方法(預設方法不用被重寫):public

default 返回值型別 方法名(

)

抽象類:

概念:用abstract修飾的,不能直接例項化的類

特點:​ 1、當乙個普通類去繼承抽象類時,必須重寫其所有抽象方法,除非自身生命為抽象類

​ 2、抽象類就是乙個模板,其存在的意義就是根據其模板建立和修改新的類

​ 3、有抽象方法的類一定是抽象類或介面

​ 4、抽象類中可以沒有抽象方法,但是抽象方法必須位於抽象類中

不能與abstract並列使用的三個修飾符

​ 原因:這三種方法不能被重寫,而抽象方法必須被重寫

​ 1、static

​ 2、final

​ 3、private

我舉個例子

現在又雞類和貓類,他們共同的屬性:編號,年齡,姓名,腿數,他們共同的行為:吃飯(但是貓吃魚、雞吃小公尺)。另外,雞還可以下蛋,貓可以捉老鼠

這裡就需要乙個抽象類(雞類和貓類都同屬於動物,動物這個叫法有點抽象),把它們公共的屬性方法都寫進去

public

abstract

class

animal

public

void

setid

(int id)

public

intgetage()

public

void

setage

(int age)

public string getname()

public

void

setname

(string name)

public

intgetlegs()

public

void

setlegs

(int legs)

public

animal

(int id,

int age, string name,

int legs)

@override

public string tostring()

';}//他們共同的行為:吃飯

public

abstract

void

eat();

}

建立乙個貓類繼承這個抽象類

public

class

catextends

animal

@override

public

void

eat(

)}

然後貓可以抓老鼠,我們可以定義乙個介面,因為所有貓類都可以抓老鼠(雞可不會抓老鼠)

建立介面還有乙個用處(開發的六字真言:高內聚,低耦合),還有很高的拓展性

public

inte***ce

catchs

最終的**就是

public class cat extends animal implements catchs

@override

public void eat()

@override

public void catchs()

}

雞吃公尺那個和這個一樣,我就不一一枚舉出來了

抽象類裡面都是公共的屬性,你不能把貓捉老鼠的,雞吃公尺的都寫進去,這樣就體現不了抽象類的作用了,而且還會**冗餘,因為老鼠並沒有吃公尺這個功能,但是你繼承了你就需要實現。

介面是這個類獨有的方法,誰有抓的功能,誰去實現,這樣就避免了**冗餘、提高**拓展性。

介面是介面,抽象類是抽象類,大家不要混淆。

抽象方法 抽象類 介面 介面和抽象類的區別

某個父類只知道子類因該包含什麼樣的方法,無法知道這些子類如何實現這些方法。抽象類包含該方法但沒有對該方法的具體實現。有抽象方法的類只能被定義為抽象類,抽象類裡可以沒有抽象方法。抽象方法和抽象類的規則 public abstract class shape private string color p...

介面和抽象類區別

介面和抽象類有什麼區別 你選擇使用介面和抽象類的依據是什麼?介面和抽象類的概念不一樣。介面是對動作的抽象,抽象類是對根源的抽象。抽象類表示的是,這個物件是什麼。介面表示的是,這個物件能做什麼。比如,男人,女人,這兩個類 如果是類的話 他們的抽象類是人。說明,他們都是人。人可以吃東西,狗也可以吃東西,...

介面和抽象類區別

抽象類 特點 1.抽象類中可以構造方法 2.抽象類中可以存在普通屬性,方法,靜態屬性和方法。3.抽象類中可以存在抽象方法。4.如果乙個類中有乙個抽象方法,那麼當前類一定是抽象類 抽象類中不一定有抽象方法。5.抽象類中的抽象方法,需要有子類實現,如果子類不實現,則子類也需要定義為抽象的。介面 1.在介...