亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java基礎教程之封裝與接口

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

總結之前的內容,對象(object)指代某一事物,類(class)指代象的類型。對象可以有狀態和動作,即數據成員和方法。

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

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

封裝與接口

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

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

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

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

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

對象成員的封裝

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

1.public: 該成員外部可見,即該成員為接口的一部分
2.private: 該成員外部不可見,只能用于內部使用,無法從外部訪問。
(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
}

內部方法并不受封裝的影響。Human的內部方法可以調用任意成員,即使是設置為private的height和breath()

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

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

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


“加了殼的遙控器”

如果我們從main中強行調用height:

復制代碼 代碼如下:

System.out.println(aPerson.height);

將會有如下錯誤提示:
復制代碼 代碼如下:

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

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

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

類的封裝

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

練習 封裝一個Torch類,來表示電筒。接口有開關和充電。內部的成員有電量。

總結

封裝,接口
private, public

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成电影在线观看天堂色| 午夜精品福利视频| 亚洲第一视频在线观看| 亚洲国产日韩欧美在线图片| 亚洲午夜精品久久久久久久久久久久| 欧美大肥婆大肥bbbbb| 美女精品久久久| 岛国视频午夜一区免费在线观看| 亚洲欧美日韩视频一区| 日韩在线观看你懂的| 国产亚洲精品美女| 久久夜色撩人精品| 精品亚洲一区二区三区四区五区| 国产精品免费一区二区三区都可以| 精品免费在线观看| 美女性感视频久久久| 久久视频国产精品免费视频在线| 国产精品久久久久aaaa九色| 国产视频综合在线| 久久777国产线看观看精品| 欧美日韩在线一区| 一色桃子一区二区| 欧美成aaa人片免费看| 精品久久久久久久久久久久久| 亚洲性av网站| 色午夜这里只有精品| 精品一区二区三区三区| 亚洲香蕉成人av网站在线观看| 久久精品视频导航| 尤物yw午夜国产精品视频| 国语对白做受69| 国产精品久久中文| 欧美成人久久久| 亚洲欧美制服第一页| 91久久国产精品| 人人做人人澡人人爽欧美| 国产精品中文字幕久久久| 精品久久久91| 久久99久久99精品中文字幕| 日本精品在线视频| 97成人超碰免| 成人有码在线播放| 韩国视频理论视频久久| 久久人人看视频| 久久久影视精品| 国产精品第一第二| 成人中文字幕+乱码+中文字幕| 欧美日韩人人澡狠狠躁视频| 国产精品∨欧美精品v日韩精品| 国产自产女人91一区在线观看| 日韩国产精品视频| 亚洲视频国产视频| 最近2019中文免费高清视频观看www99| 最近中文字幕日韩精品| 亚洲国产日韩欧美在线动漫| 欧美性xxxx极品hd满灌| 俺去亚洲欧洲欧美日韩| 日韩有码视频在线| 国产精品日韩久久久久| 视频在线一区二区| 乱亲女秽乱长久久久| 国产视频亚洲精品| 91tv亚洲精品香蕉国产一区7ujn| 青青a在线精品免费观看| 亚洲日本成人女熟在线观看| 国产精品久久久久久久久久久久久| 久久久99久久精品女同性| 成人在线观看视频网站| 日韩精品在线视频| 欧美精品久久久久久久久久| 中文国产成人精品久久一| 欧美人与物videos| 成人中文字幕+乱码+中文字幕| 欧美三级xxx| 日韩美女视频免费看| 久久久久久久久中文字幕| 国产精品激情自拍| 日韩欧美999| 欧美成年人视频网站欧美| 久久精品一区中文字幕| 精品国内亚洲在观看18黄| 久久国产精品偷| 国产精品久久久久999| 亚洲视频在线视频| 亚洲精品720p| 亚洲小视频在线| 亚洲人成在线观看| 国产情人节一区| 久久久国产精品视频| 日本精品va在线观看| 国产精品入口日韩视频大尺度| 日韩欧美亚洲国产一区| 国产69精品久久久久99| 国产成人亚洲综合青青| 2019最新中文字幕| 亚洲国产精品久久久久| 日韩av在线导航| 91国内揄拍国内精品对白| 久久综合亚洲社区| 欧美性videos高清精品| 亚洲第一视频网| 亚洲xxxxx电影| 久久亚洲国产精品| 国产一区二区三区直播精品电影| 日本久久久久亚洲中字幕| 亚洲第一页中文字幕| 久久久精品免费| 国产精品视频免费在线| 日韩高清有码在线| 正在播放欧美一区| 日韩最新中文字幕电影免费看| 亚洲第一级黄色片| 久久精品一本久久99精品| 欧日韩不卡在线视频| 日韩av毛片网| 欧美精品福利在线| 91久久久在线| 亚洲成人激情在线观看| 国产不卡精品视男人的天堂| 亚洲欧美日韩国产中文专区| 欧美极品少妇xxxxⅹ喷水| 国产精品久久久久久久久久免费| 国产精品都在这里| 成人高清视频观看www| 国产亚洲a∨片在线观看| 欧美理论电影网| 亚洲已满18点击进入在线看片| 日韩中文字幕精品| 精品国产一区二区三区在线观看| 国产这里只有精品| 97在线视频精品| 色综合伊人色综合网| 久久精品91久久久久久再现| 国产98色在线| 精品日本高清在线播放| 午夜精品久久久99热福利| 一区二区三区国产视频| 菠萝蜜影院一区二区免费| 日本一区二三区好的精华液| 深夜成人在线观看| 国产成人精品午夜| 亚洲乱码一区二区| 国产精品99蜜臀久久不卡二区| 日韩黄色在线免费观看| 精品久久久久久久久久久| 国产亚洲精品美女久久久| 欧美又大粗又爽又黄大片视频| 91大神在线播放精品| 国产精品扒开腿做爽爽爽的视频| 亚洲欧美自拍一区| 亚洲国产精品久久久久秋霞蜜臀| 久久精品国产精品| 2021久久精品国产99国产精品| 91精品在线影院| 国产+成+人+亚洲欧洲| 91精品国产成人www| xxav国产精品美女主播| 亚洲一区二区三区毛片| 色樱桃影院亚洲精品影院| www.美女亚洲精品| 日韩免费在线看| 成人免费观看49www在线观看| 91情侣偷在线精品国产| 狠狠久久五月精品中文字幕|