JAVA為什么要使用封裝及如何封裝經(jīng)典實(shí)例
前言
Java的封裝指的是在一個(gè)類中將數(shù)據(jù)和方法進(jìn)行封裝,使其可以保護(hù)起來,只能在該類內(nèi)部訪問,而不允許外部直接訪問和修改。這是Java面向?qū)ο缶幊痰娜齻€(gè)基本特性之一,另外兩個(gè)是繼承和多態(tài)。在此之前我們已經(jīng)學(xué)習(xí)過關(guān)于繼承的概念,今天我們來學(xué)習(xí)有關(guān)封裝的內(nèi)容。
封裝的含義
封裝是面向?qū)ο缶幊痰囊环N重要概念,是將數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一個(gè)類中,使得數(shù)據(jù)對外部的訪問受到限制,只能通過類中的公共方法來訪問或操作。封裝的目的是隱藏類的實(shí)現(xiàn)細(xì)節(jié),并且保護(hù)數(shù)據(jù)不被隨意修改,從而增強(qiáng)了代碼的安全性和可維護(hù)性。另外,封裝也使得代碼的擴(kuò)展和修改更加方便,只需在類內(nèi)部進(jìn)行修改而不需要修改其他代碼。
通過封裝,可以提高類的安全性和可維護(hù)性,使得類的實(shí)現(xiàn)細(xì)節(jié)被隱藏,只暴露出有限的接口和功能給外部使用,從而減少了類之間的耦合性。同時(shí),封裝還可以實(shí)現(xiàn)數(shù)據(jù)隱藏和數(shù)據(jù)保護(hù),提高程序的可靠性和可擴(kuò)展性。
封裝的優(yōu)點(diǎn)如下:
- 提高類的安全性:封裝可以避免外部程序直接訪問和修改類的內(nèi)部數(shù)據(jù),從而保證類的數(shù)據(jù)安全性和保密性。但是,需要注意的是,封裝并不是萬能的,有些攻擊手段仍然可以突破封裝的保護(hù)措施,因此需要綜合使用多種安全技術(shù)來保護(hù)類的數(shù)據(jù)安全。
- 提高代碼的可讀性:封裝可以隱藏對象的實(shí)現(xiàn)細(xì)節(jié),使得使用者只需要關(guān)心類的接口,而不需要知道類的實(shí)現(xiàn)細(xì)節(jié)。這樣可以提高代碼的可讀性和可維護(hù)性。另外,封裝還可以使代碼更易于理解,因?yàn)槭褂谜咧恍枰P(guān)注類的公共方法,而不需要了解類的所有細(xì)節(jié)。
- 提高代碼的復(fù)用性:封裝可以將類的接口和實(shí)現(xiàn)分離,使得類的實(shí)現(xiàn)可以獨(dú)立于接口而變化。這樣可以提高代碼的復(fù)用性和可擴(kuò)展性。例如,如果需要更改類的
四種訪問控制符
Java中,采用訪問控制符來控制類中數(shù)據(jù)成員和方法的訪問權(quán)限,主要有四種訪問控制符:public、private、protected和默認(rèn)訪問控制符(即不寫訪問控制符)。
- public:表示該數(shù)據(jù)成員或方法可以被其他任何類訪問。
- private:表示該數(shù)據(jù)成員或方法只能在當(dāng)前類內(nèi)部訪問。
- protected:表示該數(shù)據(jù)成員或方法可以在當(dāng)前類和其子類中訪問。
- 默認(rèn)訪問控制符:表示該數(shù)據(jù)成員或方法只能在同一個(gè)包內(nèi)的其他類中訪問。
封裝的兩種經(jīng)典實(shí)例
銀行賬戶類
該類的主要屬性包括賬戶名、賬號(hào)、賬戶余額等。其中賬戶余額是一個(gè)私有屬性,外部無法直接訪問。類中提供了一系列操作賬戶的方法,例如存款、取款、查詢余額等。這些方法都能夠在保證賬戶余額正確的情況下,修改賬戶余額。
public class BankAccount { private String accountNumber; private double balance; public BankAccount(String accountNumber, double balance) { this.accountNumber = accountNumber; this.balance = balance; } public String getAccountNumber() { return accountNumber; } public double getBalance() { return balance; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) { if (balance >= amount) { balance -= amount; } else { System.out.println("Insufficient balance."); } } }
- accountNumber: 表示賬戶號(hào)碼的字符串。
- balance: 表示賬戶余額的雙精度浮點(diǎn)數(shù)。
- BankAccount(String accountNumber, double balance): 構(gòu)造函數(shù),用于創(chuàng)建一個(gè)新的銀行賬戶對象。
- getAccountNumber(): 返回賬戶號(hào)碼的方法。
- getBalance(): 返回賬戶余額的方法。
- deposit(double amount): 存款方法,用于向賬戶中添加資金。
- withdraw(double amount): 取款方法,用于從賬戶中扣除資金。如果賬戶余額不足,將輸出一條錯(cuò)誤信息。
學(xué)生類
public class Student { // 屬性 private String name; private int age; private String gender; private String id; // 構(gòu)造方法 public Student(String name, int age, String gender, String id) { this.name = name; this.age = age; this.gender = gender; this.id = id; } // 方法 public void study() { System.out.println("學(xué)生正在學(xué)習(xí)"); } public void showInfo() { System.out.println("姓名:" + name); System.out.println("年齡:" + age); System.out.println("性別:" + gender); System.out.println("學(xué)號(hào):" + id); } // Getter和Setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
- 屬性:學(xué)生類具有姓名、年齡、性別和學(xué)號(hào)這些屬性。
- 構(gòu)造方法:學(xué)生類具有一個(gè)帶四個(gè)參數(shù)的構(gòu)造方法,用于初始化學(xué)生對象。
- 方法:學(xué)生類具有學(xué)習(xí)方法和展示學(xué)生信息的方法。
- Getter和Setter方法:學(xué)生類具有獲取和設(shè)置屬性值的Getter和Setter方法,用于保護(hù)屬性的私有性。
總結(jié)
到此這篇關(guān)于JAVA為什么要使用封裝及如何封裝的文章就介紹到這了,更多相關(guān)JAVA使用封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用maven profile指定配置文件打包適用多環(huán)境的方法
這篇文章主要介紹了使用maven profile指定配置文件打包適用多環(huán)境的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼
這篇文章主要介紹了java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04Mybatis傳遞多個(gè)參數(shù)的三種實(shí)現(xiàn)方法
這篇文章主要介紹了Mybatis傳遞多個(gè)參數(shù)的三種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04解決Mybatis報(bào)錯(cuò):org.apache.ibatis.reflection.ReflectionException
文章主要討論了在使用MyBatis進(jìn)行數(shù)據(jù)庫操作時(shí)遇到的幾個(gè)常見問題及其解決方法,首先,文章指出如果DTO類中沒有定義getter和setter方法,會(huì)導(dǎo)致反射異常,解決方法是使用Lombok的@Data注解自動(dòng)生成這些方法2025-01-01基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字
這篇文章主要介紹了基于Java將Excel科學(xué)計(jì)數(shù)法解析成數(shù)字,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09