<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            java語言

            Java的抽象和接口

            時間:2025-03-31 23:31:39 java語言 我要投稿

            Java的抽象和接口

              Java廣泛應用于PC、數據中心、游戲控制臺、科學超級計算機、移動電話和互聯網,下面為大家介紹一下Java的抽象和接口,一起來看看!

              一、抽象:

              抽象類(abstract class):使用了abstract關鍵字所修飾的類叫做抽象類。抽象類無法實例化,也就是說,不能new出來一個抽象類的對象(實例)。

              抽象方法(abstract method):使用abstract關鍵字所修飾的方法叫做抽象方法。抽象方法需要定義在抽象類中。相對于抽象方法,之前所定義的方法叫做具體方法(有聲明,有實現)。

              如果一個類包含了抽象方法,那么這個類一定是抽象類。

              如果某個類是抽象類,那么該類可以包含具體方法(有聲明、有實現)。

              如果一個類中包含了抽象方法,那么這個類一定要聲明成abstract class,也就是說,該類一定是抽象類;反之,如果某個類是抽象類,那么該類既可以包含抽象方法,也可以包含具體方法。

              無論何種情況,只要一個類是抽象類,那么這個類就無法實例化。

              在子類繼承父類(父類是個抽象類)的情況下,那么該子類必須要實現父類中所定義的所有抽象方法;否則,該子類需要聲明成一個abstract class。

              二、接口

              Java語言不支持一個類有多個直接的父類(多繼承),但現實例子中,又有很多類似于多繼承的例子,比如教師,他的父類既可以是人,也可以是父母,所以,在java中就用繼承來填充這個空缺,java不可以多繼承,但可以實現(implements)多個接口,間接的實現了多繼承。

              Java接口的特征歸納:

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

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

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

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

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

              6、Java接口必須通過類來實現它的抽象方法 如:publicclass A implements B{...}

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

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

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

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

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

              三、它們的區別

              相同點:

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

              2、都不能被實例化

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

              不同點:

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

              2、 一個類只能繼承一個直接的父類,這個父類可能是抽象類,但一個類可以實現多個接口,這是接口的優勢,但這一優勢是以不允許為任何方法提供實現作為代價的

              3、為什么Java語言不允許多重繼承呢?當子類覆蓋父類的實例方法或隱藏父類的成員變量及靜態方法時,Java虛擬機采用不同的綁定規則,假如還允許一個類有多個直接的父類,那么會使綁定規則更加復雜,

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

              4、使用接口和抽象類的總體原則:

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

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

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

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


            【Java的抽象和接口】相關文章:

            Java基礎:抽象類和接口07-20

            Java抽象類和接口的比較08-01

            Java中接口和抽象類的異同08-12

            Java抽象類與接口的區別10-14

            理解Java的接口與抽象類06-22

            接口和抽象類的區別05-09

            java抽象技巧09-24

            Java接口介紹09-07

            java中spring的幾個重要類和接口09-10

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院