Java面向?qū)ο蟮姆庋b特征深度解析
在上一篇文章中,我們了解了面向?qū)ο蟮幕A(chǔ)內(nèi)容,這一篇將會(huì)更加深入地了解面向?qū)ο蟮奶卣鳌?/p>
面向?qū)ο笕筇卣?/h2>
面向?qū)ο笳Z(yǔ)言有三大特征:
- 封裝
- 繼承
- 多態(tài)
封裝
對(duì)一個(gè)類(lèi)實(shí)現(xiàn)封裝,意味著限制其它類(lèi)對(duì)該類(lèi)數(shù)據(jù)的訪問(wèn)。
簡(jiǎn)單來(lái)講,封裝就是隱藏?cái)?shù)據(jù),就是保護(hù)對(duì)象的數(shù)據(jù)。對(duì)象,聽(tīng)起來(lái)總是那么地抽象,為了更好地理解封裝,我將對(duì)象具體指向人,從人的角度進(jìn)行講解。
在社會(huì)上生活的每一個(gè)人,總是會(huì)和其他人進(jìn)行交際,為了擴(kuò)充自己的人脈或者為了發(fā)生一些“思想上的碰撞”。

但是,你總不會(huì)希望自己被一個(gè)毫不相識(shí)的人發(fā)現(xiàn)個(gè)人的隱私信息或者一些更加私密性的東西。所以,你希望將這些信息給保護(hù)起來(lái)。Java作為一種典型的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,自然也會(huì)為對(duì)象考慮。所以,保護(hù)對(duì)象的私密信息將是Java的一項(xiàng)重要任務(wù)。封裝就是保護(hù)對(duì)象的私密信息的一種體現(xiàn)。
在Java中,使用了很多技術(shù)實(shí)現(xiàn)封裝,接下來(lái)一一進(jìn)行講解。
private關(guān)鍵字——實(shí)現(xiàn)類(lèi)封裝
private用于限制變量的作用域,被private修飾的變量只能在該類(lèi)中使用,該類(lèi)的對(duì)象不能直接調(diào)用private變量。
先看一個(gè)例子
public class Person {
private String name;
private int age;
private String sex;
}
在這個(gè)類(lèi)中定義了三個(gè)私有變量——name、age、sex。因?yàn)樗鼈儽?code>private所修飾,所以他們被稱(chēng)為私有域。對(duì)于私有域來(lái)說(shuō),他們不能通過(guò)對(duì)象進(jìn)行調(diào)用,只可以在類(lèi)中進(jìn)行使用。

這是寫(xiě)在idea中的一段代碼,可以看到,當(dāng)使用Person類(lèi)對(duì)象進(jìn)行調(diào)用的時(shí)候,沒(méi)有顯示Person類(lèi)的三個(gè)屬性。如果直接調(diào)用,程序?qū)?huì)報(bào)錯(cuò):

那么,在對(duì)象無(wú)法直接訪問(wèn)私有域的情況下,我們應(yīng)該怎樣查看對(duì)象的屬性?答案是使用訪問(wèn)器方法和更改器方法。
訪問(wèn)器方法和更改器方法
訪問(wèn)器方法:getXxx(),提供屬性的訪問(wèn)
更改器方法:setXxx(),對(duì)屬性進(jìn)行設(shè)置
通過(guò)更改器方法設(shè)置/修改屬性的值,通過(guò)訪問(wèn)器方法得到屬性的值。對(duì)上面的Person類(lèi)進(jìn)行修改:
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;
}
}
包——類(lèi)的集合
在Java中,類(lèi)具有特別重要的地位,所有操作都是在類(lèi)中進(jìn)行定義,你不可能在類(lèi)外面寫(xiě)一段循環(huán)操作或者其他操作。

為了讓程序員更加方便地尋找需要的類(lèi),Java的設(shè)計(jì)者引入了包的概念。
包(package):是一個(gè)類(lèi)似于文件夾的概念,可以將多個(gè)類(lèi)文件保存在一個(gè)包里面。

引入包之后,類(lèi)便可以“出現(xiàn)”重名的情況。只要保證這些類(lèi)位于不同的包即可。

導(dǎo)入包
為了可以使用包中的類(lèi),使用import關(guān)鍵字導(dǎo)入指定的包,在導(dǎo)入包之后,就可以使用包中的類(lèi)。
import java.util.Date; //導(dǎo)入java包下的Date類(lèi)
現(xiàn)在,思考一個(gè)問(wèn)題:如果導(dǎo)入的兩個(gè)包里有重名的類(lèi),那么我們應(yīng)該怎么區(qū)分這兩個(gè)類(lèi)呢?
答案是:使用包含報(bào)名的全類(lèi)名。以Date類(lèi)為例:
在Java中,有兩個(gè)Date類(lèi):一個(gè)位于java.util,另外一個(gè)位于java.sql,如果在一個(gè)程序中同時(shí)使用Date時(shí),需要加上包名。
import java.util.Date; //由于有命名沖突的情況,只能導(dǎo)入一個(gè)包
public class Person {
Date date;
java.sql.Date dat;
}
或者也可以
import java.sql.Date
public class Person {
Date date;
java.util.Date dat;
}
從人的角度理解包
和之前一樣,我們不把對(duì)象視為一個(gè)抽象的、無(wú)法理解的概念,將它具體化,將它視為人,那么包又是什么?
如果你看過(guò)Java API或者對(duì)Java有一個(gè)比較深的了解,那么,你會(huì)發(fā)現(xiàn),包是有具體的功能的。更加具體地說(shuō),同一個(gè)包放同一個(gè)類(lèi)型的類(lèi)。例如:java.util包里面放置了一些工具類(lèi),java.sql包里面放置了一些用于數(shù)據(jù)庫(kù)連接的類(lèi)。java.io包里面放置了一些關(guān)于輸入輸出流的類(lèi)······
這樣,我們就可以這樣理解包:
在成長(zhǎng)的過(guò)程中,因?yàn)檫x擇的不同,每個(gè)人都有不同的職業(yè),醫(yī)生、廚師、工程師、程序員······,也就是說(shuō),包對(duì)應(yīng)著人類(lèi)社會(huì)中的職業(yè)。

不加訪問(wèn)權(quán)限——實(shí)現(xiàn)包封裝
老話說(shuō)得好,隔行如隔山,每一個(gè)行業(yè)都有自己行業(yè)的一些潛在規(guī)則,每一個(gè)行業(yè)都有其他行業(yè)不了解的規(guī)則。那么,Java是如何實(shí)現(xiàn)這種包和包之間的信息封裝?看下面的代碼:
package doctors;
public class doctor {
String name; //行業(yè)名
int exp; //工作經(jīng)驗(yàn)
int age; //年齡
String skill; //行業(yè)技能
}
上面的這段代碼就實(shí)現(xiàn)了包封裝。簡(jiǎn)單地說(shuō),就是不加任何修飾符。
在Java中,不加任何修飾符表示該變量可以被包中的任何一個(gè)類(lèi)使用。
總結(jié)
封裝性是面向?qū)ο蟮囊环N基本特性,它的出現(xiàn)主要是為了保護(hù)信息的安全。從人的視角看,封裝就是不愿意分享自己小秘密的一種體現(xiàn)。
到此這篇關(guān)于Java面向?qū)ο蟮姆庋b特征深度解析的文章就介紹到這了,更多相關(guān)Java 封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring的定時(shí)任務(wù)@Scheduled源碼詳解
這篇文章主要介紹了Spring的定時(shí)任務(wù)@Scheduled源碼詳解,@Scheduled注解是包org.springframework.scheduling.annotation中的一個(gè)注解,主要是用來(lái)開(kāi)啟定時(shí)任務(wù),本文提供了部分實(shí)現(xiàn)代碼與思路,需要的朋友可以參考下2023-09-09
Java之如何讀取Excel獲取真實(shí)行數(shù)
這篇文章主要介紹了Java之如何讀取Excel獲取真實(shí)行數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-06-06
詳解mybatis批量插入10萬(wàn)條數(shù)據(jù)的優(yōu)化過(guò)程
這篇文章主要介紹了詳解mybatis批量插入10萬(wàn)條數(shù)據(jù)的優(yōu)化過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Springboot居然可以設(shè)置動(dòng)態(tài)的Banner(推薦)
這篇文章主要介紹了Springboot居然可以設(shè)置動(dòng)態(tài)的Banner,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
當(dāng)Mybatis遇上目錄樹(shù)超全完美解決方案
這篇文章主要介紹了當(dāng)Mybatis遇上目錄樹(shù)有哪些解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Java樹(shù)形結(jié)構(gòu)遞歸查詢(xún)方式
文章介紹了Java中實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)遞歸查詢(xún)的方法,首先找出所有的根節(jié)點(diǎn),然后通過(guò)循環(huán)遍歷根節(jié)點(diǎn),找到每個(gè)根節(jié)點(diǎn)的子節(jié)點(diǎn),最終構(gòu)建完整的樹(shù)形結(jié)構(gòu),這是一種有效的遞歸查詢(xún)思路,適用于需要層次化展示數(shù)據(jù)的場(chǎng)景2024-12-12
Java通過(guò)百度地圖API獲取定位(普通IP定位)的方法教程
這篇文章主要介紹了Java通過(guò)百度地圖API獲取定位的方法教程,首先說(shuō)明了實(shí)現(xiàn)這個(gè)功能的需求和初衷,然后詳細(xì)描述了利用百度地圖API實(shí)現(xiàn)這個(gè)功能的步驟,包括在百度地圖開(kāi)放平臺(tái)的準(zhǔn)備工作、學(xué)習(xí)官網(wǎng)API文檔、修改API的AK配置、Java代碼獲取定位等,需要的朋友可以參考下2024-11-11

