欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

官方辦法

JAVA語言提供的一個(gè)關(guān)鍵字“FINAL”可以用來履行該任務(wù)。看看下面的源代碼范例:

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

//FinalDemo.java
public final class FinalDemo {
}

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

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

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

在編譯第一個(gè)類后,如果你接著編譯第二個(gè)類,那么JDK編譯器報(bào)錯(cuò),你會(huì)得到下列錯(cuò)誤信息:

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


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

非官方辦法

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

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

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

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

public class PrivateTest2 extends PrivateTest{


}


在編譯第一個(gè)類后,如果你接著編譯第二個(gè)類,那么JDK編譯器報(bào)錯(cuò),你會(huì)得到下列錯(cuò)誤信息:

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


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

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

    我們剛才在第一個(gè)類中將構(gòu)造器聲明為private的權(quán)限?,F(xiàn)在,當(dāng)我們?cè)谄渌愔欣^承這個(gè)類的時(shí)候,編譯器將會(huì)嘗試調(diào)用一個(gè)默認(rèn)的超類構(gòu)件方法。因?yàn)槌惙秶鷥?nèi)的構(gòu)件方法是聲明為private權(quán)限的, 編譯器將報(bào)錯(cuò),說不能調(diào)用超類構(gòu)件方法。因此,我們通過非官方辦法阻止了一個(gè)類被其他類所繼承。

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

相關(guān)文章

  • Springboot如何實(shí)現(xiàn)自定義異常數(shù)據(jù)

    Springboot如何實(shí)現(xiàn)自定義異常數(shù)據(jù)

    這篇文章主要介紹了Springboot如何實(shí)現(xiàn)自定義異常數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 配置tjxCold(idea效率插件)的模版教程詳解

    配置tjxCold(idea效率插件)的模版教程詳解

    這篇文章主要介紹了配置tjxCold(idea效率插件)的模版教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Spring外部化配置的幾種技巧分享

    Spring外部化配置的幾種技巧分享

    在油管上看了龍之春的一個(gè)Spring tips 視頻,講述Spring外部化配置的幾種技巧,收獲頗多,想拿出來給大家分享下。對(duì)spring感興趣的朋友可以了解下本文
    2021-06-06
  • 三道java新手入門面試題,通往自由的道路--多線程

    三道java新手入門面試題,通往自由的道路--多線程

    這篇文章主要為大家分享了最有價(jià)值的3道多線程面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,對(duì)hashCode方法的設(shè)計(jì)、垃圾收集的堆和代進(jìn)行剖析,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java中的取整與四舍五入方法實(shí)例

    java中的取整與四舍五入方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于java中取整與四舍五入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java中的OpenTracing使用實(shí)例

    Java中的OpenTracing使用實(shí)例

    這篇文章主要介紹了Java中的OpenTracing使用實(shí)例,主要的OpenTracing API將所有主要組件聲明為接口以及輔助類,例如Tracer,Span,SpanContext,Scope,ScopeManager,Format(用映射定義通用的SpanContext注入和提取格式),需要的朋友可以參考下
    2024-01-01
  • 全網(wǎng)最全SpringBoot集成swagger的詳細(xì)教程

    全網(wǎng)最全SpringBoot集成swagger的詳細(xì)教程

    swagger是當(dāng)下比較流行的實(shí)時(shí)接口文文檔生成工具,swagger分為swagger2?和swagger3兩個(gè)常用版本,二者區(qū)別不是很大,主要對(duì)于依賴和注解進(jìn)行了優(yōu)化,swagger2需要引入2個(gè)jar包,swagger3只需要一個(gè),用起來沒有什么大的區(qū)別,本文給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2022-08-08
  • java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法示例

    java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法示例

    這篇文章主要介紹了java統(tǒng)計(jì)漢字字?jǐn)?shù)的方法,結(jié)合實(shí)例形式分析了java正則判定、字符串遍歷及統(tǒng)計(jì)相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • javaweb 項(xiàng)目初始配置的方法步驟

    javaweb 項(xiàng)目初始配置的方法步驟

    本文主要介紹了javaweb 項(xiàng)目初始配置的方法步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之棧與綜合計(jì)算器的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之棧與綜合計(jì)算器的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中棧與綜合計(jì)算器的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2022-10-10

最新評(píng)論