最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA中阻止類的繼承(官方和非官方)

 更新時間:2014年01月19日 13:07:44   作者:  
在面向?qū)ο蟮睦碚撝? 有一些方案要求你用一個辦法來聲明一個不可繼承的類。一般而言,如果類提供的功能不應(yīng)該被改變,或者更恰當(dāng)?shù)恼f,是被覆蓋(override)的時候才會出現(xiàn)這種情況。在這篇文章里,我討論在JAVA語言中的實現(xiàn)辦法--官方和非官方的辦法

官方辦法

JAVA語言提供的一個關(guān)鍵字“FINAL”可以用來履行該任務(wù)??纯聪旅娴脑创a范例:

復(fù)制代碼 代碼如下:

//FinalDemo.java
public final class FinalDemo {
}

    下面讓我們來制作另一個類,它將會繼承上面聲明的類。JAVA語言提供的“EXTENDS”關(guān)鍵字將能夠使得一個類繼承于一個現(xiàn)有的類。

復(fù)制代碼 代碼如下:

//FinalDemo2.java
public class FinalDemo2 extends FinalDemo {
}  

在編譯第一個類后,如果你接著編譯第二個類,那么JDK編譯器報錯,你會得到下列錯誤信息:

FinalDemo2.java:1: cannot inherit from final FinalDemo
public class FinalDemo2 extends FinalDemo{}
                                ^
1 error


現(xiàn)在,你已經(jīng)通過官方辦法來成功阻止了第一個類被另一個類所繼承。

非官方辦法

    但是,阻止類被其他類所繼承的辦法也不是唯一的??紤]下面的代碼,我聲明了構(gòu)造方法為私有(private)的, 而且也聲明了一個靜態(tài)方法(static method)來返回一個類對象。

復(fù)制代碼 代碼如下:

public class PrivateTest{
        private PrivateTest(){
                System.out.println("Private Default Constructor");
        }
        public static PrivateTest getInstance(){
                return new PrivateTest();
        }
}

    上面被修改的代碼被稱為是"Singleton模式," 一個getInstance方法總是只返回這個類的一個實例。 但是為什么這段代碼阻止了類被繼承呢?考慮下面的代碼,聲明的類應(yīng)該能繼承上面的類。

public class PrivateTest2 extends PrivateTest{


}


在編譯第一個類后,如果你接著編譯第二個類,那么JDK編譯器報錯,你會得到下列錯誤信息:

PrivateTest2.java:1: PrivateTest() has private access in PrivateTest
public class PrivateTest2 extends PrivateTest{
       ^
1 error


    第二個類不能繼承第一個類。 但是提示錯誤的意思是什么呢? JAVA語言要求在一個類中至少要提供一個構(gòu)件方法。 如果你沒有提供任何構(gòu)件方法, JDK將會在你聲明的類中插入一個默認(rèn)的構(gòu)件方法。 換句話說,默認(rèn)的是一個不帶參數(shù),空構(gòu)件體,和一個公共(public)訪問權(quán)限的構(gòu)件方法。 但是,如果你自己定義了一個構(gòu)件方法, 那么JDK編譯器就不會插入這么默認(rèn)的構(gòu)件方法。我們剛才在PrivateTest類中聲明了一個默認(rèn)的構(gòu)件方法,但是我們將默認(rèn)的public訪問權(quán)限改為了private權(quán)限,這些都是符合JDK編譯器語法檢查的規(guī)則的。 

    現(xiàn)在我們來看看第二個部門。JAVA語言也要求你必須在構(gòu)件方法里的第一行來調(diào)用(call)超類(super class)的構(gòu)件方法。 這個是啟動繼承特征所必須的。 在JAVA中,我們通過調(diào)用super()這個方法來完成這個任務(wù),它將會映射到一個超類的構(gòu)件方法中。 如果你沒有給超類提供一個默認(rèn)的構(gòu)造方法,那么JDK編譯器將會插入一個默認(rèn)的超類構(gòu)件方法用來調(diào)用。

    我們剛才在第一個類中將構(gòu)造器聲明為private的權(quán)限?,F(xiàn)在,當(dāng)我們在其他類中繼承這個類的時候,編譯器將會嘗試調(diào)用一個默認(rèn)的超類構(gòu)件方法。因為超類范圍內(nèi)的構(gòu)件方法是聲明為private權(quán)限的, 編譯器將報錯,說不能調(diào)用超類構(gòu)件方法。因此,我們通過非官方辦法阻止了一個類被其他類所繼承。

Usman Saleem
Mohammad Ali Jinnah University
E-mail: usman_saleem@yahoo.com 

相關(guān)文章

  • Java實現(xiàn)去除文檔陰影的示例代碼

    Java實現(xiàn)去除文檔陰影的示例代碼

    文稿掃描大家用的都比較頻繁、想是各種證件、文件都可以通過掃描文稿功能保存到手機。相比直接拍照,在掃描文稿時,程序會對圖像進(jìn)行一些矯正。比如去除陰影、修正傾斜、旋轉(zhuǎn)矯正等。進(jìn)行這些處理后的圖片要更加容易識別。今天就來討論一下去除陰影的操作
    2022-12-12
  • Java常問面試內(nèi)容--數(shù)組、聲明、初始化、冒泡、多維數(shù)組、稀疏數(shù)組

    Java常問面試內(nèi)容--數(shù)組、聲明、初始化、冒泡、多維數(shù)組、稀疏數(shù)組

    這篇文章主要介紹了Java多線程面試題(面試官常問),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • 雙token實現(xiàn)token超時策略示例

    雙token實現(xiàn)token超時策略示例

    用于restful的app應(yīng)用無狀態(tài)無sesion登錄示例,需要的朋友可以參考下
    2014-02-02
  • 分享Spring的下載組件

    分享Spring的下載組件

    這篇文章主要為大家分享了Spring的下載組件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • SpringCloud整合Nacos實現(xiàn)流程詳解

    SpringCloud整合Nacos實現(xiàn)流程詳解

    這篇文章主要介紹了SpringCloud整合Nacos實現(xiàn)流程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot自定義FailureAnalyzer詳解

    SpringBoot自定義FailureAnalyzer詳解

    這篇文章主要介紹了SpringBoot自定義FailureAnalyzer詳解,FailureAnalyzer是一種在啟動時攔截?exception?并將其轉(zhuǎn)換為?human-readable?消息的好方法,包含在故障分析中,需要的朋友可以參考下
    2023-11-11
  • Java基于rest assured實現(xiàn)接口測試過程解析

    Java基于rest assured實現(xiàn)接口測試過程解析

    這篇文章主要介紹了Java基于rest assured實現(xiàn)接口測試過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • java中int、double、char等變量的取值范圍詳析

    java中int、double、char等變量的取值范圍詳析

    這篇文章主要給大家介紹了關(guān)于java中int、double、char等變量取值范圍的相關(guān)資料,每個變量都給出了詳細(xì)的實例代碼,對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2021-10-10
  • java的泛型你真的了解嗎

    java的泛型你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了java的泛型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 初識MyBatis及基本配置和執(zhí)行

    初識MyBatis及基本配置和執(zhí)行

    這篇文章主要介紹了初識MyBatis的基本知識,文中給大家提到了mybatis基本配置和執(zhí)行過程,需要的朋友可以參考下
    2017-11-11

最新評論

尼玛县| 宁国市| 湾仔区| 清水河县| 循化| 吴桥县| 华宁县| 临清市| 富锦市| 棋牌| 宝山区| 临湘市| 贡觉县| 广西| 霍邱县| 古交市| 通许县| 青铜峡市| 大同市| 麟游县| 明光市| 博野县| 嵊泗县| 安塞县| 阜新市| 海伦市| 怀来县| 上饶市| 英德市| 南雄市| 湘潭市| 临朐县| 玉林市| 巴彦淖尔市| 满洲里市| 六安市| 怀集县| 梅河口市| 固安县| 溧水县| 信丰县|