国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 15:45:38
字體:
來源:轉載
供稿:網友

官方辦法

JAVA語言提供的一個關鍵字“FINAL”可以用來履行該任務。看看下面的源代碼范例:

復制代碼 代碼如下:

//FinalDemo.java
public final class FinalDemo {
}

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

復制代碼 代碼如下:

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

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

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


現在,你已經通過官方辦法來成功阻止了第一個類被另一個類所繼承。

非官方辦法

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

復制代碼 代碼如下:

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

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

public class PrivateTest2 extends PrivateTest{


}


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

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


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

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

    我們剛才在第一個類中將構造器聲明為private的權限。現在,當我們在其他類中繼承這個類的時候,編譯器將會嘗試調用一個默認的超類構件方法。因為超類范圍內的構件方法是聲明為private權限的, 編譯器將報錯,說不能調用超類構件方法。因此,我們通過非官方辦法阻止了一個類被其他類所繼承。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石渠县| 高安市| 读书| 安达市| 乐陵市| 大渡口区| 景泰县| 兴城市| 漳浦县| 慈溪市| 昭苏县| 永春县| 汉寿县| 九龙城区| 海阳市| 温泉县| 望城县| 大足县| 张家界市| 高雄市| 平果县| 定远县| 蒙城县| 汾阳市| 商洛市| 邳州市| 通江县| 景德镇市| 石景山区| 北安市| 双城市| 阳高县| 乌兰浩特市| 宜川县| 酒泉市| 望城县| 锦屏县| 泰宁县| 兴宁市| 治多县| 贡嘎县|