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

Java基礎(chǔ)第四篇 封裝與接口

 更新時間:2021年09月10日 15:05:35   作者:Vamei  
本文將對介紹Java 的封裝與接口進行介紹,將要封裝(encapsulation)對象的成員(成員包括數(shù)據(jù)成員和方法),從而只允許從外部調(diào)用部分的成員。利用封裝,我們可以提高對象的易用性和安全性。想具體了解的小伙伴請參考下面文章的內(nèi)容

前言:

總結(jié)之前的內(nèi)容,對象(object)指代某一事物,類(class)指代象的類型。對象可以有狀態(tài)和動作,即數(shù)據(jù)成員和方法。

到現(xiàn)在為止,數(shù)據(jù)成員和方法都是同時開放給內(nèi)部和外部的。在對象內(nèi)部,我們利用this來調(diào)用對象的數(shù)據(jù)成員和方法。在對象外部,比如當我們在另一個類中調(diào)用對象的時,可以使用 對象.數(shù)據(jù)成員對象.方法() 來調(diào)用對象的數(shù)據(jù)成員和方法。

1、封裝與接口

封裝(encapsulation)是計算機常見的術(shù)語,即保留有限的外部接口(interface),隱藏具體實施細節(jié)。比如在Linux架構(gòu),就可以看到Linux操作系統(tǒng)封裝了底層硬件的具體細節(jié),只保留了系統(tǒng)調(diào)用這一套接口。用戶處在封裝的外部,只能通過接口,進行所需的操作。

封裝在生活中很常見。比如下面是一個充電電筒:

一個用戶即使不看說明書,也可以猜到這個電筒的操作: 開關(guān)和充電。這個電筒用一個塑料殼將用戶不需要接觸的內(nèi)部細節(jié)隱藏起來,只保留了兩個接口,開關(guān)和電插頭。使用這兩個接口,用戶足以使用該產(chǎn)品在設(shè)計中想要實現(xiàn)的功能。如果所有的細節(jié)都同時暴露給用戶,那么用戶會對產(chǎn)品感到不知所措 (比如下面不加殼的遙控器)。因此,封裝提高了產(chǎn)品的易用性。

 

如果產(chǎn)品不封裝,電筒或者遙控器的許多細節(jié)會暴露在用戶面前: 電池、電路、密封的橡膠等等。盡管這可以讓用戶更自由的對產(chǎn)品實施操作,比如直接給電池放電,取出一個LED燈等等。然而,用戶往往要承擔更大的損壞產(chǎn)品的風險。因此,封裝提高了產(chǎn)品的安全性。

 

一個Java軟件產(chǎn)品與一個日常產(chǎn)品相同。一個對象內(nèi)部可以有許多成員(數(shù)據(jù)成員和方法)。有一些數(shù)據(jù)成員和方法只是內(nèi)部使用。這時,我們會希望有一個給對象“加殼”的機制,從而封裝對象。這樣,用戶可以比較容易學習和使用外部的接口,而不必接觸內(nèi)部成員。

2、對象成員的封裝

Java通過三個關(guān)鍵字來控制對象的成員的外部可見性(visibility): public, private, protected。

  • public: 該成員外部可見,即該成員為接口的一部分
  • private: 該成員外部不可見,只能用于內(nèi)部使用,無法從外部訪問。

(protected涉及繼承的概念,放在以后說)

我們先來封裝以前定義的Human類:

public class Test
{
    public static void main(String[] args)
    {
        Human aPerson = new Human(160);
        System.out.println(aPerson.getHeight());
        aPerson.growHeight(170);
        System.out.println(aPerson.getHeight());
        aPerson.repeatBreath(100);
    }

}

class Human
{
    /**
     * constructor
     */
    public Human(int h)
    {
        this.height = h;
        System.out.println("I'm born");
    }

    /**
     * accessor
     */
    public int getHeight()
    {
       return this.height;
    }

    /**
     * mutator
     */
    public void growHeight(int h)
    {
        this.height = this.height + h;
    }

     /**
      * encapsulated, for internal use
      */
    private void breath()
    {
        System.out.println("hu...hu...");
    }


   /**
    * call breath()
    */
    public void repeatBreath(int rep)
    {
        int i;
        for(i = 0; i < rep; i++) {
            this.breath();
        }
    }

    private int height; // encapsulated, for internal use
}


內(nèi)部方法并不受封裝的影響。Human的內(nèi)部方法可以調(diào)用任意成員,即使是設(shè)置為privateheightbreath()

外部方法只能調(diào)用public成員。當我們在Human外部時,比如Test中,我們只能調(diào)用Human中規(guī)定為public的成員,而不能調(diào)用規(guī)定為private的成員。

通過封裝,Human類就只保留了下面幾個方法作為接口:

  • getHeight()
  • growHeight()
  • repBreath()

我們可以將Human類及其接口表示為如下圖的形式:

上圖就如“加了殼的遙控器”

如果我們從main中強行調(diào)用height:

System.out.println(aPerson.height);

將會有如下錯誤提示:

Test.java:6: height has private access in Human
        System.out.println(aPerson.height);
                                  ^
1 error

Beep, 你觸電了! 一個被說明為private的成員,不能被外部調(diào)用。

在Java的通常規(guī)范中,表達狀態(tài)的數(shù)據(jù)成員(比如height)要設(shè)置成private。對數(shù)據(jù)成員的修改要通過接口提供的方法進行(比如getHeight()和growHeight())。這個規(guī)范起到了保護數(shù)據(jù)的作用。用戶不能直接修改數(shù)據(jù),必須通過相應(yīng)的方法才能讀取和寫入數(shù)據(jù)。類的設(shè)計者可以在接口方法中加入數(shù)據(jù)的使用規(guī)范。

3、類的封裝

在一個.java文件中,有且只能有一個類帶有public關(guān)鍵字,比如上面的Test類。所以,從任意其他類中,我們都可以直接調(diào)用該類。Human類沒有關(guān)鍵字。更早之前,我們對象的成員也沒有關(guān)鍵字。這種沒有關(guān)鍵字的情況也代表了一種可見性,我將在包(package)的講解中深入。

4、總結(jié)

封裝,接口

private, public

到此這篇關(guān)于Java基礎(chǔ) 第四篇 封裝與接口的文章就介紹到這了,更多相關(guān)Java 的封裝與接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程實現(xiàn)FTP批量上傳文件

    Java多線程實現(xiàn)FTP批量上傳文件

    這篇文章主要為大家詳細介紹了Java多線程實現(xiàn)FTP批量上傳文件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java中String判斷值為null或空及地址是否相等的問題

    Java中String判斷值為null或空及地址是否相等的問題

    這篇文章主要介紹了Java中String判斷值為null或空及地址是否相等的問題,文中舉了簡單的例子對字符串類型的值和地址問題進行講解,需要的朋友可以參考下
    2016-01-01
  • Springboot?異步任務(wù)和定時任務(wù)的異步處理

    Springboot?異步任務(wù)和定時任務(wù)的異步處理

    本文介紹了Springboot異步任務(wù)和定時任務(wù)的異步處理,Springboot?中,異步任務(wù)和定時任務(wù)是經(jīng)常遇到的處理問題方式,為了能夠用好這兩項配置,不干擾正常的業(yè)務(wù),需要對其進行異步化配置。怎么設(shè)置合理的異步處理線程就是其核心和關(guān)鍵,下文詳情需要的朋友可以參考下
    2022-05-05
  • Apache CXF如何把wsdl生成java代碼

    Apache CXF如何把wsdl生成java代碼

    這篇文章主要介紹了Apache CXF如何把wsdl生成java代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot中封裝Cors自動配置方式

    SpringBoot中封裝Cors自動配置方式

    這篇文章主要介紹了SpringBoot中封裝Cors自動配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java利用哈夫曼編碼實現(xiàn)字符串壓縮

    Java利用哈夫曼編碼實現(xiàn)字符串壓縮

    赫夫曼編碼也翻譯為?哈夫曼編碼(Huffman?Coding),又稱霍夫曼編碼,是一種編碼方式,?屬于一種程序算法。本文將利用哈夫曼樹實現(xiàn)哈夫曼編碼進行字符串壓縮,需要的可以參考一下
    2022-09-09
  • SpringBoot?異步線程間傳遞上下文方式

    SpringBoot?異步線程間傳遞上下文方式

    這篇文章主要介紹了SpringBoot?異步線程間傳遞上下文方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java gui實現(xiàn)計算器小程序

    java gui實現(xiàn)計算器小程序

    這篇文章主要為大家詳細介紹了java gui實現(xiàn)計算器小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 解決Maven中關(guān)于依賴導(dǎo)入不進的問題

    解決Maven中關(guān)于依賴導(dǎo)入不進的問題

    這篇文章主要介紹了解決Maven中關(guān)于依賴導(dǎo)入不進的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • java使用DelayQueue實現(xiàn)延時任務(wù)

    java使用DelayQueue實現(xiàn)延時任務(wù)

    項目中經(jīng)常會用到類似一些需要延遲執(zhí)行的功能,比如緩存,java提供了DelayQueue來很輕松的實現(xiàn)這種功能,下面小編就來和大家介紹一下如何使用DelayQueue實現(xiàn)延時任務(wù)吧
    2023-10-10

最新評論

宿州市| 甘德县| 视频| 泸州市| 桐乡市| 团风县| 唐河县| 大安市| 姜堰市| 江陵县| 喜德县| 陈巴尔虎旗| 绍兴县| 霞浦县| 太原市| 杭锦旗| 聂荣县| 始兴县| 城固县| 丰宁| 广德县| 静安区| 江门市| 建宁县| 八宿县| 葵青区| 辽阳县| 桐乡市| 西充县| 麻江县| 肇东市| 屏东市| 长子县| 萍乡市| 安国市| 丘北县| 苗栗县| 邵东县| 溆浦县| 文成县| 龙门县|