成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java接口學習筆記

開發 后端
java語言不支持一個類有多個直接的父類(多繼承),但可以實現(implements)多個接口,間接的實現了多繼承

一、Java接口基礎知識

1, Java語言不支持一個類有多個直接的父類(多繼承),但可以實現(implements)多個接口,間接的實現了多繼承.

2, 與Java接口相關的設計模式:

1, 定制服務模式

設計精粒度的接口,每個Java接口代表相關的一組服務,通過繼承來創建復合接口

2, 適配器模式

當每個系統之間接口不匹配時,用適配器來轉換接口

3, 默認適配器模式

為接口提供簡單的默認實現

4, 代理模式

為Java接口的實現類創建代理類,使用者通過代理來獲得實現類的服務

5, 標識類型模式

用接口來標識一種沒有任何行為的抽象類型

6, 常量接口模式

在接口中定義靜態常量,在其它類中通過import static語句引入這些常量

Java接口的特征歸納:

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

2, Java接口中的方法默認都是public,abstract類型的(都可省略),沒有方法體,不能被實例化 

  1. public interface A  
  2.    {  
  3.     int CONST = 1; //合法,CONST默認為public,static,final類型  
  4.     void method(); //合法,method()默認為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; //錯,var是常量,必須顯示初始化   
  4.    void method(){...};   //錯,接口中只能包含抽象方法  
  5.    protected void method2(); //錯,接口中的方法必須是public類型  
  6.    static void method3(){...};   //錯,接口中不能包含靜態方法  
  7.   } 

4, 接口中沒有構造方法,不能被實例化

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

5, 一個接口不能實現(implements)另一個接口,但它可以繼承多個其它的接口
 

  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稱為復合接口  
  10.  {  
  11.   void methodC();  
  12.  }  
  13.  public interface C implements A{...}   //錯 


6, Java接口必須通過類來實現它的抽象方法

public class A implements B{...}

7, 當類實現了某個Java接口時,它必須實現接口中的所有抽象方法,否則這個類必須聲明為抽象的

8, 不允許創建接口的實例(實例化),但允許定義接口類型的引用變量,該引用變量引用實現了這個接口的類的實例

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

9, 一個類只能繼承一個直接的父類,但可以實現多個接口,間接的實現了多繼承.

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

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

5, 接口是構建松耦合軟件系統的重要法寶,由于接口用于描述系統對外提供的所有服務,因此接口中的成員變量和方法都必須是public類型的,確保外部使用者能訪問它們,接口僅僅描述系統能做什么,但不指明如何去做,所有接口中的方法都是抽象方法,接口不涉及和任何具體實例相關的細節,因此接口沒有構造方法,不能被實例化,沒有實例變量.

二, 比較抽象類與接口

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

相同點

1, 代表系統的抽象層,當一個系統使用一顆繼承樹上的類時,應該盡量把引用變量聲明為繼承樹的上層抽象類型,這樣可以提高兩個系統之間的送耦合

2, 都不能被實例化

3, 都包含抽象方法,這些抽象方法用于描述系統能提供哪些服務,但不提供具體的實現

不同點:

1, 在抽象類中可以為部分方法提供默認的實現,從而避免在子類中重復實現它們,這是抽象類的優勢,但這一優勢限制了多繼承,而接口中只能包含抽象方法.由于在抽象類中允許加入具體方法,因此擴展抽象類的功能,即向抽象類中添加具體方法,不會對它的子類造成影響,而對于接口,一旦接口被公布,就必須非常穩定,因為隨意在接口中添加抽象方法,會影響到所有的實現類,這些實現類要么實現新增的抽象方法,要么聲明為抽象類

2, 一個類只能繼承一個直接的父類,這個父類可能是抽象類,但一個類可以實現多個接口,這是接口的優勢,但這一優勢是以不允許為任何方法提供實現作為代價的三, 為什么Java語言不允許多重繼承呢?當子類覆蓋父類的實例方法或隱藏父類的成員變量及靜態方法時,Java虛擬機采用不同的綁定規則,假如還允許一個類有多個直接的父類,那么會使綁定規則更加復雜,

因此,為了簡化系統結構設計和動態綁定機制,Java語言禁止多重繼承.而接口中只有抽象方法,沒有實例變量和靜態方法,只有接口的實現類才會實現接口的抽象方法(接口中的抽象方法是通過類來實現的),因此,一個類即使有多個接口,也不會增加Java虛擬機進行動態綁定的復雜度.因為Java虛擬機永遠不會把方法與接口綁定,而只會把方法與它的實現類綁定.四, 使用接口和抽象類的總體原則:

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

  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接口本身必須非常穩定,Java接口一旦制定,就不允許隨遇更加,否則對外面使用者及系統本身造成影響

3, 用抽象類來定制系統中的擴展點

抽象類來完成部分實現,還要一些功能通過它的子類來實現 

【編輯推薦】

  1. Java連接MySQL中文亂碼處理
  2. 在Java應用程序中使用Jfreechart配置
  3. Java虛擬機內部構成淺析
  4. 淺談Java線程的生命周期
  5. 關于Java繼承的一些復習
責任編輯:張燕妮 來源: 百度空間
相關推薦

2011-07-08 18:28:43

iOS 接口

2009-06-29 09:00:14

JSFJava

2009-06-29 16:50:27

Java集合框架

2009-06-17 14:21:39

core java

2011-03-16 10:13:31

java單例模式

2010-03-17 15:45:06

Java多線程求和

2009-06-15 17:54:50

Java核心技術

2009-07-14 16:08:41

WebWork學習

2011-03-17 16:43:49

2009-07-09 16:24:48

JDK學習筆記Java語言基礎

2009-06-17 17:09:02

Java異常Java斷言

2009-08-28 10:48:00

linux操作系統linux學習掃瞄

2009-09-08 17:57:54

LINQ to Dat

2009-09-08 18:14:12

CCNA學習筆記

2009-04-12 08:59:05

Symbian諾基亞移動OS

2009-04-12 09:00:08

Symbian諾基亞移動OS

2009-04-12 09:01:05

Symbian諾基亞移動OS

2009-04-12 09:02:32

Symbian諾基亞移動OS

2009-04-12 09:06:00

Symbian諾基亞移動OS

2011-08-09 17:21:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91在线网站 | 久草精品在线 | 亚洲二区在线 | 91网站视频在线观看 | av网站在线免费观看 | 欧美综合国产精品久久丁香 | 亚洲一二三区精品 | 婷婷综合网| 在线观看中文字幕视频 | 日本精品久久久一区二区三区 | 成人欧美| 91精品久久久久久久久久入口 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 中文字幕成人在线 | 国产精品99久久久久久动医院 | 五月槐花香 | 一区二区精品 | 精品日韩一区 | 亚洲精品在线免费看 | 欧美日本一区 | 天天精品综合 | 精品国产一区二区三区av片 | 精品视频一区二区三区在线观看 | 中文字幕一区二区不卡 | 久久精品亚洲成在人线av网址 | 国产一级在线 | 日本爱爱 | 亚州av | 亚洲欧美综合 | 波多野吉衣久久 | 日本精品一区二区三区在线观看视频 | 毛片的网址| 色婷婷精品国产一区二区三区 | 国产自产21区 | 亚洲人成在线观看 | 免费v片在线观看 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 久久av资源网 | 人人干免费 | 国产综合久久久久久鬼色 | 综合国产 |