抽象類與接口

1、抽象類

一、抽象類

包含一個抽象方法的類就是抽象類java

二、抽象方法

聲明而未被實現的方法,抽象方法必須使用abstract關鍵詞字聲明跨域

1安全

2ide

3函數

4spa

5設計

6code

public abstract class People {  //關鍵詞abstract,聲明該類爲抽象類blog

    public int age;繼承

    public void Num() {

    }

    public abstract Name(); //聲明該方法爲抽象方法

}  

三、抽象類被子類繼承,子類(若是不是抽象類)必須重寫抽象類中的全部抽象方法

四、抽象類不能被直接實例化,要經過其子類進行實例化

五、只要包含一個抽象方法的抽象類,該方法必需要定義成抽象類,不論是否還包含有其餘方法。

六、子類中的抽象方法不能與父類的抽象方法同名。

七、abstract不能與final並列修飾同一個類。

八、abstract 不能與private、static、final或native並列修飾同一個方法。

 

爲何須要用到抽象類?

 在下面這個例子中,把打印機類封裝成抽象類,把print定義成抽象類,當HPPrinter和CannonPrinter要繼承printer類的時候,必須重寫print函數。這樣寫的好處是,每一個打印機都有本身打印方式,此舉能夠防止子類沒有寫明打印方式。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public abstract void Printer() {

    public void open() {

        system.out.print("打印機開啓");

    }

    public void close() {

        system.out.print("打印機關閉");

    }

    abstract void print();  //把print方法定義爲抽象方法

}

 

public HPPrinter extends Printer {

    void print(){             //必須重寫抽象方法print()   

        system.out.print("惠普打印機開始打印");

    };

}

 

public CanonPrinter extends Printer {

    void print(){             //必須重寫抽象方法print()

        system.out.print("佳能打印機開始打印");

    };

}

 

2、接口

一、接口是java中最重要的概念,接口能夠理解爲一種特殊的類,裏面所有是由全局常量和公共的抽象方法組成

接口中全部方法都是抽象方法;

接口當中全部的方法都是public類型

二、接口的格式

1

2

3

4

interface interfaceName{

    全局常量

    抽象方法

}

 

三、接口的實現也必須經過子類,使用關鍵字implements,並且接口是能夠多實現的

1

2

3

class implements Inter1,Inter2{ //Inter1和Inter2是接口

    ...

}

 

四、一個類能夠同時繼承抽象類和接口

1

2

3

class extends Abs implements Inter1,Inter2{ //Abs是一個抽象類

    ...

}

 

五、一個接口不能繼承抽象類,但能夠經過extends關鍵字繼承多個接口,實現接口的多繼承

1

2

3

interface Inter implements Inter1,Inter2{ //Inter、Inter一、Inter2都爲接口

    ...

}

  

3、抽象類和接口區別

本節參考自(http://www.cnblogs.com/chenssy/ 做者:chenssy

(一)語法層次

1

2

3

4

5

6

7

8

9

public abstract class People {  //關鍵詞abstract,聲明該類爲抽象類

    void Num();      

    abstract void Name();    //聲明該方法爲抽象方法

}

 

Interface Person {

  void Num();

  void Name();

} 

  • 抽象類方式中,抽象類能夠擁有任意範圍的成員數據,同時也能夠擁有本身的非抽象方法,

  • 可是接口方式中,它僅可以有靜態、不能修改的成員數據(可是咱們通常是不會在接口中使用成員數據),同時它全部的方法都必須是抽象的。

  • 在某種程度上來講,接口是抽象類的特殊化。

  • 對子類而言,它只能繼承一個抽象類(這是java爲了數據安全而考慮的),可是卻能夠實現多個接口。

(二)設計層次

一、 抽象層次不一樣

抽象類是對類抽象,而接口是對行爲的抽象。抽象類是對整個類總體進行抽象,包括屬性、行爲,可是接口倒是對類局部(行爲)進行抽象。

二、 跨域不一樣

抽象類所跨域的是具備類似特色的類,而接口卻能夠跨域不一樣的類。咱們知道抽象類是從子類中發現公共部分,而後泛化成抽象類,子類繼承該父類便可,可是接口不一樣。實現它的子類能夠不存在任何關係,共同之處。例如貓、狗能夠抽象成一個動物類抽象類,具有叫的方法。鳥、飛機能夠實現飛Fly接口,具有飛的行爲,這裏咱們總不能將鳥、飛機共用一個父類吧!因此說抽象類所體現的是一種繼承關係,要想使得繼承關係合理,父類和派生類之間必須存在"is-a" 關係,即父類和派生類在概念本質上應該是相同的。對於接口則否則,並不要求接口的實現者和接口定義在概念本質上是一致的, 僅僅是實現了接口定義的契約而已。

三、 設計層次不一樣

對於抽象類而言,它是自下而上來設計的,咱們要先知道子類才能抽象出父類,而接口則不一樣,它根本就不須要知道子類的存在,只須要定義一個規則便可,至於什麼子類、何時怎麼實現它一律不知。好比咱們只有一個貓類在這裏,若是你這是就抽象成一個動物類,是否是設計有點兒過分?咱們起碼要有兩個動物類,貓、狗在這裏,咱們在抽象他們的共同點造成動物抽象類吧!因此說抽象類每每都是經過重構而來的!可是接口就不一樣,好比說飛,咱們根本就不知道會有什麼東西來實現這個飛接口,怎麼實現也不得而知,咱們要作的就是事前定義好飛的行爲接口。因此說抽象類是自底向上抽象而來的,接口是自頂向下設計出來的。

相關文章
相關標籤/搜索