亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2014年01月19日 13:07:44   作者:  
在面向?qū)ο蟮睦碚撝? 有一些方案要求你用一個辦法來聲明一個不可繼承的類。一般而言,如果類提供的功能不應(yī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將會在你聲明的類中插入一個默認的構(gòu)件方法。 換句話說,默認的是一個不帶參數(shù),空構(gòu)件體,和一個公共(public)訪問權(quán)限的構(gòu)件方法。 但是,如果你自己定義了一個構(gòu)件方法, 那么JDK編譯器就不會插入這么默認的構(gòu)件方法。我們剛才在PrivateTest類中聲明了一個默認的構(gòu)件方法,但是我們將默認的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)件方法中。 如果你沒有給超類提供一個默認的構(gòu)造方法,那么JDK編譯器將會插入一個默認的超類構(gòu)件方法用來調(diào)用。

    我們剛才在第一個類中將構(gòu)造器聲明為private的權(quán)限?,F(xiàn)在,當我們在其他類中繼承這個類的時候,編譯器將會嘗試調(diào)用一個默認的超類構(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)文章

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

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

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

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

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

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

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

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

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

    java中的取整與四舍五入方法實例

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

    Java中的OpenTracing使用實例

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

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

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

    java統(tǒng)計漢字字數(shù)的方法示例

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

    javaweb 項目初始配置的方法步驟

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

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

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

最新評論