自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java接口學(xué)習(xí)筆記

開(kāi)發(fā) 后端
java語(yǔ)言不支持一個(gè)類有多個(gè)直接的父類(多繼承),但可以實(shí)現(xiàn)(implements)多個(gè)接口,間接的實(shí)現(xiàn)了多繼承

一、Java接口基礎(chǔ)知識(shí)

1, Java語(yǔ)言不支持一個(gè)類有多個(gè)直接的父類(多繼承),但可以實(shí)現(xiàn)(implements)多個(gè)接口,間接的實(shí)現(xiàn)了多繼承.

2, 與Java接口相關(guān)的設(shè)計(jì)模式:

1, 定制服務(wù)模式

設(shè)計(jì)精粒度的接口,每個(gè)Java接口代表相關(guān)的一組服務(wù),通過(guò)繼承來(lái)創(chuàng)建復(fù)合接口

2, 適配器模式

當(dāng)每個(gè)系統(tǒng)之間接口不匹配時(shí),用適配器來(lái)轉(zhuǎn)換接口

3, 默認(rèn)適配器模式

為接口提供簡(jiǎn)單的默認(rèn)實(shí)現(xiàn)

4, 代理模式

為Java接口的實(shí)現(xiàn)類創(chuàng)建代理類,使用者通過(guò)代理來(lái)獲得實(shí)現(xiàn)類的服務(wù)

5, 標(biāo)識(shí)類型模式

用接口來(lái)標(biāo)識(shí)一種沒(méi)有任何行為的抽象類型

6, 常量接口模式

在接口中定義靜態(tài)常量,在其它類中通過(guò)import static語(yǔ)句引入這些常量

Java接口的特征歸納:

1, Java接口中的成員變量默認(rèn)都是public,static,final類型的(都可省略),必須被顯示初始化,即接口中的成員變量為常量(大寫,單詞之間用"_"分隔)

2, Java接口中的方法默認(rèn)都是public,abstract類型的(都可省略),沒(méi)有方法體,不能被實(shí)例化 

  1. public interface A  
  2.    {  
  3.     int CONST = 1; //合法,CONST默認(rèn)為public,static,final類型  
  4.     void method(); //合法,method()默認(rèn)為public,abstract類型  
  5.     public abstract void method2(); //method2()顯示聲明為public,abstract類型  
  6.    } 

3, Java接口中只能包含public,static,final類型的成員變量和public,abstract類型的成員方法

  1. public interface A  
  2.   {  
  3.    int var; //錯(cuò),var是常量,必須顯示初始化   
  4.    void method(){...};   //錯(cuò),接口中只能包含抽象方法  
  5.    protected void method2(); //錯(cuò),接口中的方法必須是public類型  
  6.    static void method3(){...};   //錯(cuò),接口中不能包含靜態(tài)方法  
  7.   } 

4, 接口中沒(méi)有構(gòu)造方法,不能被實(shí)例化

  1. public interface A  
  2.   {  
  3.    public A(){...}; //錯(cuò),接口中不能包含構(gòu)造方法  
  4.    void method();  
  5.   } 

5, 一個(gè)接口不能實(shí)現(xiàn)(implements)另一個(gè)接口,但它可以繼承多個(gè)其它的接口
 

  1. public interface A  
  2.  {  
  3.   void methodA();  
  4.  }  
  5.  public interface B  
  6.  {  
  7.   void methodB();  
  8.  }  
  9.  public interface C extends A, B   //C稱為復(fù)合接口  
  10.  {  
  11.   void methodC();  
  12.  }  
  13.  public interface C implements A{...}   //錯(cuò) 


6, Java接口必須通過(guò)類來(lái)實(shí)現(xiàn)它的抽象方法

public class A implements B{...}

7, 當(dāng)類實(shí)現(xiàn)了某個(gè)Java接口時(shí),它必須實(shí)現(xiàn)接口中的所有抽象方法,否則這個(gè)類必須聲明為抽象的

8, 不允許創(chuàng)建接口的實(shí)例(實(shí)例化),但允許定義接口類型的引用變量,該引用變量引用實(shí)現(xiàn)了這個(gè)接口的類的實(shí)例

  1. public class B implements A{}  
  2.    A a = new B(); //引用變量a被定義為A接口類型,引用了B實(shí)例  
  3.    A a = new A(); //錯(cuò)誤,接口不允許實(shí)例化 

9, 一個(gè)類只能繼承一個(gè)直接的父類,但可以實(shí)現(xiàn)多個(gè)接口,間接的實(shí)現(xiàn)了多繼承.

public class A extends B implements C, D{...} //B為class,C,D為interface

4, 通過(guò)接口,可以方便地對(duì)已經(jīng)存在的系統(tǒng)進(jìn)行自下而上的抽象,對(duì)于任意兩個(gè)類,不管它們是否屬于同一個(gè)父類,只有它們存在相同的功能,就能從中抽象出一個(gè)接口類型.對(duì)于已經(jīng)存在的繼承樹(shù),可以方便的從類中抽象出新的接口,但從類中抽象出新的抽象類卻不那么容易,因此接口更有利于軟件系統(tǒng)的維護(hù)與重構(gòu).對(duì)于兩個(gè)系統(tǒng),通過(guò)接口交互比通過(guò)抽象類交互能獲得更好的松耦合.

5, 接口是構(gòu)建松耦合軟件系統(tǒng)的重要法寶,由于接口用于描述系統(tǒng)對(duì)外提供的所有服務(wù),因此接口中的成員變量和方法都必須是public類型的,確保外部使用者能訪問(wèn)它們,接口僅僅描述系統(tǒng)能做什么,但不指明如何去做,所有接口中的方法都是抽象方法,接口不涉及和任何具體實(shí)例相關(guān)的細(xì)節(jié),因此接口沒(méi)有構(gòu)造方法,不能被實(shí)例化,沒(méi)有實(shí)例變量.

二, 比較抽象類與接口

1, 抽象類與接口都位于繼承樹(shù)的上層

相同點(diǎn)

1, 代表系統(tǒng)的抽象層,當(dāng)一個(gè)系統(tǒng)使用一顆繼承樹(shù)上的類時(shí),應(yīng)該盡量把引用變量聲明為繼承樹(shù)的上層抽象類型,這樣可以提高兩個(gè)系統(tǒng)之間的送耦合

2, 都不能被實(shí)例化

3, 都包含抽象方法,這些抽象方法用于描述系統(tǒng)能提供哪些服務(wù),但不提供具體的實(shí)現(xiàn)

不同點(diǎn):

1, 在抽象類中可以為部分方法提供默認(rèn)的實(shí)現(xiàn),從而避免在子類中重復(fù)實(shí)現(xiàn)它們,這是抽象類的優(yōu)勢(shì),但這一優(yōu)勢(shì)限制了多繼承,而接口中只能包含抽象方法.由于在抽象類中允許加入具體方法,因此擴(kuò)展抽象類的功能,即向抽象類中添加具體方法,不會(huì)對(duì)它的子類造成影響,而對(duì)于接口,一旦接口被公布,就必須非常穩(wěn)定,因?yàn)殡S意在接口中添加抽象方法,會(huì)影響到所有的實(shí)現(xiàn)類,這些實(shí)現(xiàn)類要么實(shí)現(xiàn)新增的抽象方法,要么聲明為抽象類

2, 一個(gè)類只能繼承一個(gè)直接的父類,這個(gè)父類可能是抽象類,但一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,這是接口的優(yōu)勢(shì),但這一優(yōu)勢(shì)是以不允許為任何方法提供實(shí)現(xiàn)作為代價(jià)的三, 為什么Java語(yǔ)言不允許多重繼承呢?當(dāng)子類覆蓋父類的實(shí)例方法或隱藏父類的成員變量及靜態(tài)方法時(shí),Java虛擬機(jī)采用不同的綁定規(guī)則,假如還允許一個(gè)類有多個(gè)直接的父類,那么會(huì)使綁定規(guī)則更加復(fù)雜,

因此,為了簡(jiǎn)化系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和動(dòng)態(tài)綁定機(jī)制,Java語(yǔ)言禁止多重繼承.而接口中只有抽象方法,沒(méi)有實(shí)例變量和靜態(tài)方法,只有接口的實(shí)現(xiàn)類才會(huì)實(shí)現(xiàn)接口的抽象方法(接口中的抽象方法是通過(guò)類來(lái)實(shí)現(xiàn)的),因此,一個(gè)類即使有多個(gè)接口,也不會(huì)增加Java虛擬機(jī)進(jìn)行動(dòng)態(tài)綁定的復(fù)雜度.因?yàn)镴ava虛擬機(jī)永遠(yuǎn)不會(huì)把方法與接口綁定,而只會(huì)把方法與它的實(shí)現(xiàn)類綁定.四, 使用接口和抽象類的總體原則:

1, 用接口作為系統(tǒng)與外界交互的窗口站在外界使用者(另一個(gè)系統(tǒng))的角度,接口向使用者承諾系統(tǒng)能提供哪些服務(wù),站在系統(tǒng)本身的角度,接口制定系統(tǒng)必須實(shí)現(xiàn)哪些服務(wù),接口是系統(tǒng)中最高層次的抽象類型.通過(guò)接口交互可以提高兩個(gè)系統(tǒng)之間的送耦合系統(tǒng)A通過(guò)系統(tǒng)B進(jìn)行交互,是指系統(tǒng)A訪問(wèn)系統(tǒng)B時(shí),把引用變量聲明為系統(tǒng)B中的接口類型,該引用變量引用系統(tǒng)B中接口的實(shí)現(xiàn)類的實(shí)例。

  1. public interface B  
  2.  {  
  3.  }  
  4.  public class C implements B  
  5.  {  
  6.  }  
  7.  public class A  
  8.  {  
  9.  }  
  10.  B a = new C(); 


2, Java接口本身必須非常穩(wěn)定,Java接口一旦制定,就不允許隨遇更加,否則對(duì)外面使用者及系統(tǒng)本身造成影響

3, 用抽象類來(lái)定制系統(tǒng)中的擴(kuò)展點(diǎn)

抽象類來(lái)完成部分實(shí)現(xiàn),還要一些功能通過(guò)它的子類來(lái)實(shí)現(xiàn) 

【編輯推薦】

  1. Java連接MySQL中文亂碼處理
  2. 在Java應(yīng)用程序中使用Jfreechart配置
  3. Java虛擬機(jī)內(nèi)部構(gòu)成淺析
  4. 淺談Java線程的生命周期
  5. 關(guān)于Java繼承的一些復(fù)習(xí)
責(zé)任編輯:張燕妮 來(lái)源: 百度空間
相關(guān)推薦

2011-07-08 18:28:43

iOS 接口

2009-06-29 09:00:14

JSFJava

2009-06-17 14:21:39

core java

2009-06-29 16:50:27

Java集合框架

2011-03-16 10:13:31

java單例模式

2009-07-09 16:24:48

JDK學(xué)習(xí)筆記Java語(yǔ)言基礎(chǔ)

2009-06-17 17:09:02

Java異常Java斷言

2010-03-17 15:45:06

Java多線程求和

2009-06-15 17:54:50

Java核心技術(shù)

2011-03-17 16:43:49

2009-07-14 16:08:41

WebWork學(xué)習(xí)

2009-09-08 17:57:54

LINQ to Dat

2009-08-28 10:48:00

linux操作系統(tǒng)linux學(xué)習(xí)掃瞄

2009-04-12 09:02:32

Symbian諾基亞移動(dòng)OS

2009-04-12 09:06:00

Symbian諾基亞移動(dòng)OS

2009-04-12 08:59:05

Symbian諾基亞移動(dòng)OS

2009-04-12 09:00:08

Symbian諾基亞移動(dòng)OS

2009-04-12 09:01:05

Symbian諾基亞移動(dòng)OS

2011-03-15 16:19:08

iptables

2009-09-15 16:52:19

Linq To Dat
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)