欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言:

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

到現(xiàn)在為止,數(shù)據(jù)成員和方法都是同時(shí)開(kāi)放給內(nèi)部和外部的。在對(duì)象內(nèi)部,我們利用this來(lái)調(diào)用對(duì)象的數(shù)據(jù)成員和方法。在對(duì)象外部,比如當(dāng)我們?cè)诹硪粋€(gè)類(lèi)中調(diào)用對(duì)象的時(shí),可以使用 對(duì)象.數(shù)據(jù)成員對(duì)象.方法() 來(lái)調(diào)用對(duì)象的數(shù)據(jù)成員和方法。

1、封裝與接口

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

封裝在生活中很常見(jiàn)。比如下面是一個(gè)充電電筒:

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

 

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

 

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

2、對(duì)象成員的封裝

Java通過(guò)三個(gè)關(guān)鍵字來(lái)控制對(duì)象的成員的外部可見(jiàn)性(visibility): public, private, protected

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

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

我們先來(lái)封裝以前定義的Human類(lèi):

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成員。當(dāng)我們?cè)?code>Human外部時(shí),比如Test中,我們只能調(diào)用Human中規(guī)定為public的成員,而不能調(diào)用規(guī)定為private的成員。

通過(guò)封裝,Human類(lèi)就只保留了下面幾個(gè)方法作為接口:

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

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

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

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

System.out.println(aPerson.height);

將會(huì)有如下錯(cuò)誤提示:

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

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

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

3、類(lèi)的封裝

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

4、總結(jié)

封裝,接口

private, public

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

相關(guān)文章

最新評(píng)論