Java面向對象的封裝特征深度解析

在上一篇文章中,我們瞭解瞭面向對象的基礎內容,這一篇將會更加深入地瞭解面向對象的特征。

面向對象三大特征

面向對象語言有三大特征:

  • 封裝
  • 繼承
  • 多態

封裝

對一個類實現封裝,意味著限制其它類對該類數據的訪問。

簡單來講,封裝就是隱藏數據,就是保護對象的數據。對象,聽起來總是那麼地抽象,為瞭更好地理解封裝,我將對象具體指向人,從人的角度進行講解。
在社會上生活的每一個人,總是會和其他人進行交際,為瞭擴充自己的人脈或者為瞭發生一些“思想上的碰撞”。

請添加圖片描述

但是,你總不會希望自己被一個毫不相識的人發現個人的隱私信息或者一些更加私密性的東西。所以,你希望將這些信息給保護起來。Java作為一種典型的面向對象程序設計語言,自然也會為對象考慮。所以,保護對象的私密信息將是Java的一項重要任務。封裝就是保護對象的私密信息的一種體現。

在Java中,使用瞭很多技術實現封裝,接下來一一進行講解。

private關鍵字——實現類封裝

private用於限制變量的作用域,被private修飾的變量隻能在該類中使用,該類的對象不能直接調用private變量。

先看一個例子

public class Person {
    private String name;
    private int age;
    private String sex;
}

在這個類中定義瞭三個私有變量——name、age、sex。因為它們被private所修飾,所以他們被稱為私有域。對於私有域來說,他們不能通過對象進行調用,隻可以在類中進行使用。

在這裡插入圖片描述

這是寫在idea中的一段代碼,可以看到,當使用Person類對象進行調用的時候,沒有顯示Person類的三個屬性。如果直接調用,程序將會報錯:

在這裡插入圖片描述

那麼,在對象無法直接訪問私有域的情況下,我們應該怎樣查看對象的屬性?答案是使用訪問器方法和更改器方法。

訪問器方法和更改器方法

訪問器方法:getXxx(),提供屬性的訪問
更改器方法:setXxx(),對屬性進行設置

通過更改器方法設置/修改屬性的值,通過訪問器方法得到屬性的值。對上面的Person類進行修改:

public class Person {
    private String name;
    private int age;
    private String sex;

    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getSex() {
        return sex;
    }
}

包——類的集合

在Java中,類具有特別重要的地位,所有操作都是在類中進行定義,你不可能在類外面寫一段循環操作或者其他操作。

在這裡插入圖片描述

為瞭讓程序員更加方便地尋找需要的類,Java的設計者引入瞭包的概念。

包(package):是一個類似於文件夾的概念,可以將多個類文件保存在一個包裡面。

在這裡插入圖片描述

引入包之後,類便可以“出現”重名的情況。隻要保證這些類位於不同的包即可。

在這裡插入圖片描述

導入包

為瞭可以使用包中的類,使用import關鍵字導入指定的包,在導入包之後,就可以使用包中的類。

import java.util.Date;	//導入java包下的Date類

現在,思考一個問題:如果導入的兩個包裡有重名的類,那麼我們應該怎麼區分這兩個類呢?

答案是:使用包含報名的全類名。以Date類為例:
在Java中,有兩個Date類:一個位於java.util,另外一個位於java.sql,如果在一個程序中同時使用Date時,需要加上包名。

import java.util.Date;	//由於有命名沖突的情況,隻能導入一個包
public class Person {
    Date date;
    java.sql.Date dat;
}

或者也可以

import java.sql.Date
public class Person {
    Date date;
    java.util.Date dat;
}

從人的角度理解包

和之前一樣,我們不把對象視為一個抽象的、無法理解的概念,將它具體化,將它視為人,那麼包又是什麼?
如果你看過Java API或者對Java有一個比較深的瞭解,那麼,你會發現,包是有具體的功能的。更加具體地說,同一個包放同一個類型的類。例如:java.util包裡面放置瞭一些工具類,java.sql包裡面放置瞭一些用於數據庫連接的類。java.io包裡面放置瞭一些關於輸入輸出流的類······
這樣,我們就可以這樣理解包:
在成長的過程中,因為選擇的不同,每個人都有不同的職業,醫生、廚師、工程師、程序員······,也就是說,包對應著人類社會中的職業。

請添加圖片描述

不加訪問權限——實現包封裝

老話說得好,隔行如隔山,每一個行業都有自己行業的一些潛在規則,每一個行業都有其他行業不瞭解的規則。那麼,Java是如何實現這種包和包之間的信息封裝?看下面的代碼:

package doctors;

public class doctor {
    String name;	//行業名
    int exp;			//工作經驗
    int age;			//年齡
    String skill;	//行業技能
}

上面的這段代碼就實現瞭包封裝。簡單地說,就是不加任何修飾符。

在Java中,不加任何修飾符表示該變量可以被包中的任何一個類使用。

總結

封裝性是面向對象的一種基本特性,它的出現主要是為瞭保護信息的安全。從人的視角看,封裝就是不願意分享自己小秘密的一種體現。

到此這篇關於Java面向對象的封裝特征深度解析的文章就介紹到這瞭,更多相關Java 封裝內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: