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

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

 更新時間:2021年10月26日 15:17:35   作者:過氣老學長  
在面向對象程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節(jié)部分包裝、隱藏起來的方法。封裝可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問

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

面向對象三大特征

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

  • 封裝
  • 繼承
  • 多態(tài)

封裝

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

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

請?zhí)砑訄D片描述

但是,你總不會希望自己被一個毫不相識的人發(fā)現個人的隱私信息或者一些更加私密性的東西。所以,你希望將這些信息給保護起來。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中,類具有特別重要的地位,所有操作都是在類中進行定義,你不可能在類外面寫一段循環(huán)操作或者其他操作。

在這里插入圖片描述


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

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

在這里插入圖片描述

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

在這里插入圖片描述

導入包

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

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

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

答案是:使用包含報名的全類名。以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有一個比較深的了解,那么,你會發(fā)現,包是有具體的功能的。更加具體地說,同一個包放同一個類型的類。例如:java.util包里面放置了一些工具類,java.sql包里面放置了一些用于數據庫連接的類。java.io包里面放置了一些關于輸入輸出流的類······
這樣,我們就可以這樣理解包:
在成長的過程中,因為選擇的不同,每個人都有不同的職業(yè),醫(yī)生、廚師、工程師、程序員······,也就是說,包對應著人類社會中的職業(yè)。

請?zhí)砑訄D片描述

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

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

package doctors;

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

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

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

總結

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

到此這篇關于Java面向對象的封裝特征深度解析的文章就介紹到這了,更多相關Java 封裝內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java web上傳文件和下載文件代碼片段分享

    java web上傳文件和下載文件代碼片段分享

    這篇文章主要為大家詳細介紹了java web上傳文件和下載文件代碼片段,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java中的原子類AtomicInteger使用詳解

    Java中的原子類AtomicInteger使用詳解

    這篇文章主要介紹了Java中的原子類AtomicInteger使用詳解,原子操作是指不會被線程調度機制打斷的操作,這種操作一旦開始,就一直運行到結束,中間不會有任何線程上下文切換,需要的朋友可以參考下
    2023-12-12
  • maven項目install時忽略執(zhí)行test方法的總結

    maven項目install時忽略執(zhí)行test方法的總結

    這篇文章主要介紹了maven項目install時忽略執(zhí)行test方法的總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring IOC的相關注解運用詳解

    Spring IOC的相關注解運用詳解

    這篇文章主要介紹了Spring IOC的相關注解運用詳解,純注解實現IOC需要一個Java類代替xml文件,這個Java類上方需要添加@Configuration,表示該類是一個配置類,作用是代替配置文件,需要的朋友可以參考下
    2023-08-08
  • Java中網絡IO的實現方式(BIO、NIO、AIO)介紹

    Java中網絡IO的實現方式(BIO、NIO、AIO)介紹

    這篇文章主要介紹了Java中網絡IO的實現方式(BIO、NIO、AIO)介紹的相關資料,需要的朋友可以參考下
    2017-03-03
  • SpringBoot返回多種格式的數據的實現示例

    SpringBoot返回多種格式的數據的實現示例

    本文主要介紹了SpringBoot返回多種格式的數據的實現示例,主要包括了FastJson,xml,pdf,excel,資源流,具有一定的參考價值,感興趣的可以了解一下
    2021-10-10
  • 解決java數值范圍以及float與double精度丟失的問題

    解決java數值范圍以及float與double精度丟失的問題

    下面小編就為大家?guī)硪黄鉀Qjava數值范圍以及float與double精度丟失的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 我總結的幾種@Transactional失效原因說明

    我總結的幾種@Transactional失效原因說明

    這篇文章主要是我總結的幾種@Transactional失效原因說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • spring 和 spring boot 中的屬性配置方式

    spring 和 spring boot 中的屬性配置方式

    這篇文章主要介紹了spring 和 spring boot 中的屬性配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java的Socket通訊基礎編程完全指南

    Java的Socket通訊基礎編程完全指南

    這篇文章主要介紹了Java的Socket通訊基礎編程,包括對Socket服務器的并發(fā)訪問方法,是Java網絡編程中的重要知識,相當推薦!需要的朋友可以參考下
    2015-08-08

最新評論