• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      關(guān)于Java繼承性的探討

      2011-02-08 13:02:18李斌王睿
      關(guān)鍵詞:繼承性構(gòu)造方法子類

      李斌,王睿

      (揚(yáng)州市職業(yè)大學(xué)信息工程學(xué)院,江蘇揚(yáng)州225002)

      在經(jīng)歷了以大型機(jī)為代表的集中計(jì)算模式和以PC機(jī)為代表的分散計(jì)算模式之后,互聯(lián)網(wǎng)的出現(xiàn)使得計(jì)算模式進(jìn)入了網(wǎng)絡(luò)計(jì)算時(shí)代。網(wǎng)絡(luò)計(jì)算模式的一個(gè)特點(diǎn)是計(jì)算機(jī)是異構(gòu)的,即計(jì)算機(jī)的類型和操作系統(tǒng)是不一樣的,例如SUN工作站的硬件是SPARC體系,軟件是Unix中的Solaris操作系統(tǒng),而PC機(jī)的硬件是Intel體系,操作系統(tǒng)是windows或者是Linux。網(wǎng)絡(luò)計(jì)算模式的另一個(gè)特點(diǎn)是代碼可以通過(guò)網(wǎng)絡(luò)在各種計(jì)算機(jī)上進(jìn)行遷移,這就迫切需要一種跨平臺(tái)的編程語(yǔ)言,使得用它編寫(xiě)的程序能夠在網(wǎng)絡(luò)中的各種計(jì)算機(jī)上能夠正常運(yùn)行,Java就是在這種需求下應(yīng)運(yùn)而生的。Java語(yǔ)言具有簡(jiǎn)單、面向?qū)ο?、健壯、安全、可靠、平臺(tái)無(wú)關(guān)性、解釋執(zhí)行、多線程、高性能、易學(xué)、適用于網(wǎng)絡(luò)等顯著特點(diǎn),已成為當(dāng)今最流行的網(wǎng)絡(luò)編程語(yǔ)言之一。

      Java的所有程序都具有封裝性、繼承性和多態(tài)性。封裝性就是把對(duì)象的屬性和服務(wù)結(jié)合成一個(gè)獨(dú)立的相同單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié);繼承是軟件重用的一種形式,也是自動(dòng)地實(shí)現(xiàn)方法和數(shù)據(jù)共享的機(jī)制;多態(tài)性是指在父類中定義的屬性或服務(wù)被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。本文僅就Java的繼承性進(jìn)行一定的探討。

      1 Java的繼承

      繼承是一種由已有類創(chuàng)建新類的機(jī)制。繼承也是面向?qū)ο笳Z(yǔ)言的基本要素之一,它是源自類的泛化機(jī)制,這種抽象機(jī)制提供了一種無(wú)限重復(fù)利用程序資源的途徑,繼承可以擴(kuò)展原有的代碼,應(yīng)用到其他程序中,而不必重新編寫(xiě)這些代碼,這樣不僅節(jié)省程序開(kāi)發(fā)時(shí)間,而且為未來(lái)程序設(shè)計(jì)增添了新的資源。對(duì)象通過(guò)繼承,保證了實(shí)現(xiàn)部分緊內(nèi)聚和松耦合的良好特性。

      利用繼承,我們可以先創(chuàng)建一個(gè)共有屬性的一般類,根據(jù)該類再創(chuàng)建具有特殊屬性的新類。在Java語(yǔ)言中,通常我們稱被繼承的一般類為父類(superclass,也叫超類),由繼承而得到的特殊類稱為子類 (subclass)。我們也可以說(shuō)子類是由父類派生出的類。

      Java的繼承原則如下:

      1)子類繼承父類的成員變量,包括實(shí)例成員變量和類成員變量;

      2) 子類繼承父類除構(gòu)造方法以外的成員方法,包括實(shí)例成員方法和類成員方法;

      3)子類不能繼承父類的構(gòu)造方法,因?yàn)楦割悩?gòu)造方法創(chuàng)建的是父類對(duì)象,子類必須聲明自己的構(gòu)造方法,創(chuàng)建子類自己的對(duì)象;

      4)子類不能刪除父類成員;

      5)子類可以增加自己的成員變量和成員方法;

      6)子類可以重定義父類成員。

      在這段代碼中,子類 SubA繼承了父類SuperA,那么子類自然就擁有了父類的變量a,同時(shí)子類自己又添加了自己新的成員變量b以擴(kuò)充自己的功能。在子類SubA中還可以更改父類SuperA的變量a,讓其適應(yīng)自己的需求,比如,我們?cè)赟ubA中增加一行代碼:int a=3;,這樣在子類SubA中的變量a實(shí)際上隱藏了父類SuperA的變量a。但是,如果試圖在子類SubA中刪除父類SuperA的變量a,這是Java所不允許的。

      子類的對(duì)象即是父類的對(duì)象。反之不然,父類的對(duì)象不是它的子類對(duì)象。例如:SuperA supa=new SubA();這條語(yǔ)句是語(yǔ)法允許的,父類對(duì)象supa能夠被賦值為子類對(duì)象new SubA();而SuBA suba=new SuperA();這條語(yǔ)句編譯是不能通過(guò)的,因?yàn)樽宇悓?duì)象suba是不能能夠被賦值為父類對(duì)象new SuperA()的。

      2 單重繼承和多重繼承

      子類直接上一層的父類稱為直接父類,如果一個(gè)類只有一個(gè)直接父類則稱這樣的繼承為單重繼承,一個(gè)類也可以是多個(gè)直接父類的子類,它從多個(gè)父類中繼承了屬性與服務(wù),這樣的繼承稱為多重繼承。

      在單重繼承方式下,父類與子類是一對(duì)多的關(guān)系,一個(gè)子類只有一個(gè)直接父類,但一個(gè)父類可以有多個(gè)子類,每個(gè)子類又可以作為父類再有自己的子類。

      3 Java中類的繼承

      Java只支持單重繼承機(jī)制,不支持多重繼承,單重繼承使得Java結(jié)構(gòu)簡(jiǎn)單,層次清楚,更安全可靠,從而避免了C++中因多重繼承而引起的難以預(yù)測(cè)的錯(cuò)誤。所以聲明的類只能有一個(gè)父類。子類的聲明格式為: [<修飾符>]class<子類名>extends<超類名>,從中我們也能清楚看出Java中類的繼承關(guān)系為單重繼承關(guān)系。在Java中,一個(gè)父類可以有多個(gè)子類,每個(gè)子類又可以作為父類再有自己的子類。由此形成具有樹(shù)形結(jié)構(gòu)的層次體系,其中具有繼承關(guān)系的、相距多個(gè)層次的類之間稱為祖先類和后代類,父類也稱為直接祖先類。這種樹(shù)形繼承關(guān)系并不違反Java的單重繼承原則。

      其實(shí),在Java中,每個(gè)類都有父類,如果沒(méi)有顯式地標(biāo)明類的父類,則隱含地假設(shè)超類為語(yǔ)言包java.lang中說(shuō)明的Object類。

      在Java中,子類對(duì)象對(duì)父類成員的訪問(wèn)權(quán)限主要依據(jù)如下規(guī)則進(jìn)行:

      1)子類對(duì)父類的私有成員(private)沒(méi)有訪問(wèn)權(quán)限;

      2)子類對(duì)父類的公有成員(public)和保護(hù)成員(protected)具有訪問(wèn)權(quán)限;

      3)子類對(duì)父類中缺省權(quán)限成員(default)的訪問(wèn)分為兩種情況,對(duì)同一包中父類的缺省權(quán)限成員具有訪問(wèn)權(quán)限,而對(duì)不同包中父類的缺省權(quán)限成員則沒(méi)有訪問(wèn)權(quán)限。

      4 Java中接口的繼承

      Java只支持單重繼承機(jī)制,但是實(shí)際應(yīng)用中有時(shí)候也需要使用多重繼承這個(gè)功能。

      Java中關(guān)于接口實(shí)現(xiàn)的聲明格式為: [<修飾符>] class<類名> [extends<超類名>] [implements<接口名1>,<接口名2>,…],從中我們可以看出一個(gè)類通過(guò)關(guān)鍵字implements實(shí)現(xiàn)了一系列的接口,這實(shí)際上就變相地完成了多重繼承的功能,所以通常我們說(shuō)Java只支持單重繼承,不支持多重繼承,但是卻可以通過(guò)接口來(lái)實(shí)現(xiàn)多重繼承的功能。

      問(wèn)題在于Java中接口本身的繼承關(guān)系是單重繼承還是多重繼承呢?我們?cè)趯W(xué)習(xí)接口的時(shí)候知道,編譯的時(shí)候接口會(huì)像類一樣被編譯,所以很多人就非常簡(jiǎn)單地認(rèn)為接口既然被當(dāng)成類編譯,那么自然接口的繼承性也和類一樣是單重的,這也正好和Java的單重繼承原則不謀而合。事實(shí)上這樣的理解是完全錯(cuò)誤的,恰恰相反,接口的本身的繼承性卻是多重的。我們看下面一段程序(程序名為ClassABCTest.java):

      程序能正常編譯,運(yùn)行結(jié)果為(見(jiàn)圖1):

      圖1 程序ClassABCTest.java運(yùn)行結(jié)果

      程序中我們聲明了三個(gè)接口InterA、InterB、InterC和兩個(gè)類 ClassABC、ClassABCTest。接口InterA和InterB是兩個(gè)獨(dú)立的接口,而接口InterC用關(guān)鍵字extends繼承了接口InterA和InterB,事實(shí)顯而易見(jiàn),這是多重繼承關(guān)系,即接口InterC同時(shí)繼承了接口InterA和InterB。

      5 結(jié)束語(yǔ)

      綜上,Java中類的繼承是單重繼承,但是卻可以通過(guò)一個(gè)類實(shí)現(xiàn)多個(gè)接口這種方法來(lái)實(shí)現(xiàn)多重繼承的功能,或者直接通過(guò)一個(gè)接口繼承多個(gè)接口來(lái)實(shí)現(xiàn)多重繼承的功能。接口不僅很好地解決了多重繼承,對(duì)于單重繼承層次較多、間接父類多的類結(jié)構(gòu),接口還可以避免子類成員的膨脹、龐雜、難以管理等問(wèn)題,但接口仍然存在不一致性等問(wèn)題。

      即便是運(yùn)用一個(gè)具有較全而完整的繼承機(jī)制的語(yǔ)言,實(shí)際應(yīng)遵循的原則也應(yīng)該是盡可能保持繼承層次體系的簡(jiǎn)單性,只有在條件非常充分的情況下才使用多重繼承。

      [1]許曉寧.JAVA技術(shù)實(shí)用教程[M].南京:東南大學(xué)出版社,2005.

      [2]葉核亞.JAVA2程序設(shè)計(jì)實(shí)用教程(第2版)[M].北京:電子工業(yè)出版社,2007.

      [3]布雷恩,等.JAVA2精要語(yǔ)言詳解與編程指南[M].北京:清華大學(xué)出版社,2002.

      [4]朱喜福.Java程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004.

      [5]王行言.JAVA語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,2000.

      [6]劉藝.JAVA程序設(shè)計(jì)大學(xué)教程[M].北京:機(jī)械工業(yè)出版社,2006.

      [7]Ian Joyner(著).對(duì)象揭秘:Java,Eiffel和c++[M].鮑志云(譯).北京:人民郵電出版社,2003.

      猜你喜歡
      繼承性構(gòu)造方法子類
      習(xí)近平文化思想的繼承性和創(chuàng)新性
      前線(2024年3期)2024-04-29 00:44:03
      DC-DC變換器分層級(jí)構(gòu)造方法
      卷入Hohlov算子的某解析雙單葉函數(shù)子類的系數(shù)估計(jì)
      關(guān)于對(duì)稱共軛點(diǎn)的倒星象函數(shù)某些子類的系數(shù)估計(jì)
      煙臺(tái)剪紙藝術(shù)文化的繼承性再思考
      商情(2016年52期)2017-04-14 12:03:06
      《夢(mèng)溪筆談》“甲子納音”構(gòu)造方法的數(shù)學(xué)分析
      草酸鈷制備中的形貌繼承性初探
      面向?qū)ο蟮亩喟姹緜鞲衅饔^測(cè)服務(wù)模式匹配方法
      幾乎最佳屏蔽二進(jìn)序列偶構(gòu)造方法
      塊H矩陣新的子類
      蒙自县| 句容市| 攀枝花市| 佳木斯市| 大冶市| 莲花县| 曲靖市| 山西省| 三门峡市| 丽水市| 新化县| 芦溪县| 翼城县| 新河县| 鄂托克前旗| 左云县| 那曲县| 萝北县| 儋州市| 察雅县| 肃宁县| 镇原县| 普格县| 洛宁县| 六枝特区| 莫力| 景宁| 濮阳市| 铁岭县| 环江| 太湖县| 镇康县| 昌邑市| 亚东县| 滕州市| 乐清市| 崇信县| 崇阳县| 搜索| 七台河市| 来宾市|