聯(lián)系博主          博客地圖
                     

          接口和抽象類

          Posted on 2007-08-22 15:03 怎么羨慕天空的飛鳥 閱讀(448) 評論(2)  編輯  收藏 所屬分類: java
                   在Java中看到接口,第一個想到的可能就是C++中的多重繼承和Java中的另外一個關(guān)鍵字abstract。從另外一個角度實(shí)現(xiàn)多重繼承是接口的功能之一,接口的存在可以使Java中的對象可以向上轉(zhuǎn)型為多個基類型,并且和抽象類一樣可以防止他人創(chuàng)建該類的對象,因?yàn)榻涌诓辉试S創(chuàng)建對象。 

          interface關(guān)鍵字用來聲明一個接口,它可以產(chǎn)生一個完全抽象的類,并且不提供任何具體實(shí)現(xiàn)。interface的特性整理如下:

          1.        接口中的方法可以有參數(shù)列表和返回類型,但不能有任何方法體。

          2.        接口中可以包含字段,但是會被隱式的聲明為staticfinal

          3.        接口中的字段只是被存儲在該接口的靜態(tài)存儲區(qū)域內(nèi),而不屬于該接口。

          4.        接口中的方法可以被聲明為public或不聲明,但結(jié)果都會按照public類型處理。

          5.        當(dāng)實(shí)現(xiàn)一個接口時,需要將被定義的方法聲明為public類型的,否則為默認(rèn)訪問類型,Java編譯器不允許這種情況。

          6.        如果沒有實(shí)現(xiàn)接口中所有方法,那么創(chuàng)建的仍然是一個接口。

          7.        擴(kuò)展一個接口來生成新的接口應(yīng)使用關(guān)鍵字extends,實(shí)現(xiàn)一個接口使用implements

          interface在某些地方和abstract有相似的地方,但是采用哪種方式來聲明類主要參照以下兩點(diǎn):

          1.        如果要創(chuàng)建不帶任何方法定義和成員變量的基類,那么就應(yīng)該選擇接口而不是抽象類。

          2.        如果知道某個類應(yīng)該是基類,那么第一個選擇的應(yīng)該是讓它成為一個接口,只有在必須要有方法定義和成員變量的時候,才應(yīng)該選擇抽象類。因?yàn)槌橄箢愔性试S存在一個或多個被具體實(shí)現(xiàn)的方法,只要方法沒有被全部實(shí)現(xiàn)該類就仍是抽象類。

           

          以上就是接口的基本特性和應(yīng)用的領(lǐng)域,但是接口絕不僅僅如此,在Java語法結(jié)構(gòu)中,接口可以被嵌套,既可以被某個類嵌套,也可以被接口嵌套。這在實(shí)際開發(fā)中可能應(yīng)用的不多,但也是它的特性之一。需要注意的是,在實(shí)現(xiàn)某個接口時,并不需要實(shí)現(xiàn)嵌套在其內(nèi)部的任何接口,而且,private接口不能在定義它的類之外被實(shí)現(xiàn)。



              核心: 勇敢進(jìn)取年輕的心

           

          Feedback

          # re: 接口和抽象類[未登錄]  回復(fù)  更多評論   

          2007-08-23 01:48 by xmlspy
          2. 接口中可以包含字段,但是會被隱式的聲明為static和final。

          應(yīng)該是被隱式聲明為 public static final

          另外考慮一下接口或者抽象類是否可以new :)

          # re: 接口和抽象類  回復(fù)  更多評論   

          2007-08-23 18:02 by 怎么羨慕天空的飛鳥
          關(guān)于接口和抽象類是否可以實(shí)例化:
          接口和抽象類都不可以直接通過new的方式實(shí)例化,但可以做引用。
          比如:抽象類
          abstract class Abst1(){}
          class Abst2 extends Abst1{}
          Abst1 abst1 =new Abst2();
          這也許就是java里的多態(tài)吧。

          Copyright © 怎么羨慕天空的飛鳥

          主站蜘蛛池模板: 博野县| 祥云县| 高台县| 吉林省| 林口县| 康定县| 宣武区| 南部县| 通榆县| 稷山县| 高淳县| 集安市| 浑源县| 阿拉善左旗| 高台县| 剑川县| 阜康市| 苍溪县| 无为县| 唐海县| 杂多县| 青州市| 唐山市| 安康市| 乐陵市| 枣强县| 丰都县| 临江市| 沅陵县| 青龙| 庐江县| 县级市| 永定县| 蓬安县| 达拉特旗| 金坛市| 界首市| 章丘市| 怀宁县| 周宁县| 金寨县|