一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java基礎(chǔ)教程之封裝與接口

Java基礎(chǔ)教程之封裝與接口

2019-11-27 14:51junjie JAVA教程

這篇文章主要介紹了Java基礎(chǔ)教程之封裝與接口,本文用淺顯易懂的語言講解了Java中的封裝與接口,很形象的說明了這兩個面向?qū)ο笮g(shù)語,需要的朋友可以參考下

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

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

我們將要封裝(encapsulation)對象的成員(成員包括數(shù)據(jù)成員和方法),從而只允許從外部調(diào)用部分的成員。利用封裝,我們可以提高對象的易用性和安全性。

封裝與接口

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

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

Java基礎(chǔ)教程之封裝與接口

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

Java基礎(chǔ)教程之封裝與接口

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

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

對象成員的封裝

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

1.public: 該成員外部可見,即該成員為接口的一部分
2.private: 該成員外部不可見,只能用于內(nèi)部使用,無法從外部訪問。
(protected涉及繼承的概念,放在以后說)

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

 

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


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è)置為private的height和breath()

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

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

1.getHeight()
2.growHeight()
3.repBreath()
 
我們可以將Human類及其接口表示為如下圖的形式:

Java基礎(chǔ)教程之封裝與接口
“加了殼的遙控器”

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

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

System.out.println(aPerson.height);


將會有如下錯誤提示:

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

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


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

 

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

類的封裝

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

練習(xí) 封裝一個Torch類,來表示電筒。接口有開關(guān)和充電。內(nèi)部的成員有電量。

總結(jié)

封裝,接口
private, public

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品日本一区二区三区在线看 | 国产日本韩国不卡在线视频 | 麻豆找网服 | 精品性影院一区二区三区内射 | 久久精品无码人妻无码AV蜜臀 | 免费观看欧美一级高清 | 免费看1级伦理 | 国产麻豆流白浆在线观看 | 国产精品亚洲午夜不卡 | 国产农村一级特黄α真人毛片 | 天天做天天爱天天综合网 | 7777奇米影视 | 美女扒开屁股让男人进去 | 精品国产欧美一区二区 | 欧美一卡2卡三卡4卡5卡免费观看 | 7个黑人玩北条麻妃 | 高清国语自产拍免费视频国产 | 欧美日本道免费一区二区三区 | 久久这里只有精品视频e | 精品国产线拍大陆久久尤物 | 日本性生活大片 | 国产一级在线观看 | 日b在线观看 | 欧美一级在线全免费 | 国产三级精品91三级在专区 | 6969精品视频在线观看 | 亚洲成在人线久久综合 | 日韩欧美一级大片 | 黑人好大好硬好深好爽想要h | 奇米影视在线视频8888 | 男人午夜禁片在线观看 | 久久国产精品无码视欧美 | 国产精品视频在这里有精品 | 亚洲国产在线2o20 | 免费的网址| 忘忧草高清 | 精品无码一区二区三区中文字幕 | 波多野结衣中文字幕 | 亚洲男人的天堂成人 | 久久久精品3d动漫一区二区三区 | 国产videos hd |