Java面向?qū)ο蟮姆庋b特征深度解析
在上一篇文章中,我們了解了面向?qū)ο蟮幕A(chǔ)內(nèi)容,這一篇將會(huì)更加深入地了解面向?qū)ο蟮奶卣鳌?/p>
面向?qū)ο笕筇卣?/h2>
面向?qū)ο笳Z言有三大特征:
- 封裝
- 繼承
- 多態(tài)
封裝
對(duì)一個(gè)類實(shí)現(xiàn)封裝,意味著限制其它類對(duì)該類數(shù)據(jù)的訪問。
簡(jiǎn)單來講,封裝就是隱藏?cái)?shù)據(jù),就是保護(hù)對(duì)象的數(shù)據(jù)。對(duì)象,聽起來總是那么地抽象,為了更好地理解封裝,我將對(duì)象具體指向人,從人的角度進(jìn)行講解。
在社會(huì)上生活的每一個(gè)人,總是會(huì)和其他人進(jìn)行交際,為了擴(kuò)充自己的人脈或者為了發(fā)生一些“思想上的碰撞”。
但是,你總不會(huì)希望自己被一個(gè)毫不相識(shí)的人發(fā)現(xiàn)個(gè)人的隱私信息或者一些更加私密性的東西。所以,你希望將這些信息給保護(hù)起來。Java作為一種典型的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,自然也會(huì)為對(duì)象考慮。所以,保護(hù)對(duì)象的私密信息將是Java的一項(xiàng)重要任務(wù)。封裝就是保護(hù)對(duì)象的私密信息的一種體現(xiàn)。
在Java中,使用了很多技術(shù)實(shí)現(xiàn)封裝,接下來一一進(jìn)行講解。
private關(guān)鍵字——實(shí)現(xiàn)類封裝
private用于限制變量的作用域,被private修飾的變量只能在該類中使用,該類的對(duì)象不能直接調(diào)用private變量。
先看一個(gè)例子
public class Person { private String name; private int age; private String sex; }
在這個(gè)類中定義了三個(gè)私有變量——name、age、sex。因?yàn)樗鼈儽?code>private所修飾,所以他們被稱為私有域。對(duì)于私有域來說,他們不能通過對(duì)象進(jìn)行調(diào)用,只可以在類中進(jìn)行使用。
這是寫在idea中的一段代碼,可以看到,當(dāng)使用Person類對(duì)象進(jìn)行調(diào)用的時(shí)候,沒有顯示Person類的三個(gè)屬性。如果直接調(diào)用,程序?qū)?huì)報(bào)錯(cuò):
那么,在對(duì)象無法直接訪問私有域的情況下,我們應(yīng)該怎樣查看對(duì)象的屬性?答案是使用訪問器方法和更改器方法。
訪問器方法和更改器方法
訪問器方法:getXxx()
,提供屬性的訪問
更改器方法:setXxx()
,對(duì)屬性進(jìn)行設(shè)置
通過更改器方法設(shè)置/修改屬性的值,通過訪問器方法得到屬性的值。對(duì)上面的Person類進(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; } }
包——類的集合
在Java中,類具有特別重要的地位,所有操作都是在類中進(jìn)行定義,你不可能在類外面寫一段循環(huán)操作或者其他操作。
為了讓程序員更加方便地尋找需要的類,Java的設(shè)計(jì)者引入了包的概念。
包(package):是一個(gè)類似于文件夾的概念,可以將多個(gè)類文件保存在一個(gè)包里面。
引入包之后,類便可以“出現(xiàn)”重名的情況。只要保證這些類位于不同的包即可。
導(dǎo)入包
為了可以使用包中的類,使用import
關(guān)鍵字導(dǎo)入指定的包,在導(dǎo)入包之后,就可以使用包中的類。
import java.util.Date; //導(dǎo)入java包下的Date類
現(xiàn)在,思考一個(gè)問題:如果導(dǎo)入的兩個(gè)包里有重名的類,那么我們應(yīng)該怎么區(qū)分這兩個(gè)類呢?
答案是:使用包含報(bào)名的全類名。以Date類為例:
在Java中,有兩個(gè)Date類:一個(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è)抽象的、無法理解的概念,將它具體化,將它視為人,那么包又是什么?
如果你看過Java API或者對(duì)Java有一個(gè)比較深的了解,那么,你會(huì)發(fā)現(xiàn),包是有具體的功能的。更加具體地說,同一個(gè)包放同一個(gè)類型的類。例如:java.util
包里面放置了一些工具類,java.sql
包里面放置了一些用于數(shù)據(jù)庫連接的類。java.io
包里面放置了一些關(guān)于輸入輸出流的類······
這樣,我們就可以這樣理解包:
在成長(zhǎng)的過程中,因?yàn)檫x擇的不同,每個(gè)人都有不同的職業(yè),醫(yī)生、廚師、工程師、程序員······,也就是說,包對(duì)應(yīng)著人類社會(huì)中的職業(yè)。
不加訪問權(quán)限——實(shí)現(xiàn)包封裝
老話說得好,隔行如隔山,每一個(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)單地說,就是不加任何修飾符。
在Java中,不加任何修飾符表示該變量可以被包中的任何一個(gè)類使用。
總結(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)文章
maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié)
這篇文章主要介紹了maven項(xiàng)目install時(shí)忽略執(zhí)行test方法的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Spring IOC的相關(guān)注解運(yùn)用詳解
這篇文章主要介紹了Spring IOC的相關(guān)注解運(yùn)用詳解,純注解實(shí)現(xiàn)IOC需要一個(gè)Java類代替xml文件,這個(gè)Java類上方需要添加@Configuration,表示該類是一個(gè)配置類,作用是代替配置文件,需要的朋友可以參考下2023-08-08Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹
這篇文章主要介紹了Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹的相關(guān)資料,需要的朋友可以參考下2017-03-03SpringBoot返回多種格式的數(shù)據(jù)的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot返回多種格式的數(shù)據(jù)的實(shí)現(xiàn)示例,主要包括了FastJson,xml,pdf,excel,資源流,具有一定的參考價(jià)值,感興趣的可以了解一下2021-10-10解決java數(shù)值范圍以及float與double精度丟失的問題
下面小編就為大家?guī)硪黄鉀Qjava數(shù)值范圍以及float與double精度丟失的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06我總結(jié)的幾種@Transactional失效原因說明
這篇文章主要是我總結(jié)的幾種@Transactional失效原因說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11