Java面向對象——封裝以及this關鍵字

封 裝

封裝是面向對象編程(OOP)的三大特性之一,它將數據和操作數據的方法組合在一個單元內部,并對外部隱藏其具體實現細節。在Java中,封裝是通過類的訪問控制修飾符(如 private、protected、public)和訪問方法(getter 和 setter)來實現的。
在這里插入圖片描述

訪問控制修飾符

在Java中,類的成員可以使用不同的訪問控制修飾符來控制其可見性。

private:只有同一個類內部的方法可以訪問。

default(包級訪問):同一個包內的類可以訪問。

protected:同一個包內的類以及不同包中的子類可以訪問。

public:任何類都可以訪問。

Getter 和 Setter 方法

這些方法用于在類外部訪問和修改類的私有屬性。Getter 方法用于獲取屬性的值,Setter 方法用于設置屬性的值。它們通常是公有方法,允許外部代碼通過方法來訪問屬性,而不需要直接訪問屬性本身。

封裝的優點

  • 數據隱藏: 封裝隱藏了類的內部實現細節,防止外部代碼直接訪問和修改數據,從而提高了數據的安全性。

  • 代碼靈活性: 封裝使得類的內部結構可以更改,而不影響外部代碼的使用。

  • 代碼重用: 封裝提供了接口來訪問類的功能,使得其他代碼可以重用類的功能而不需要了解內部實現細節。

封裝的實現:

封裝通過將類的成員聲明為私有(private)來實現,然后通過公有(public)的 Getter 和 Setter 方法來提供對這些成員的訪問和修改。

封裝的應用場景:

封裝在軟件設計中的應用廣泛,尤其適用于隱藏內部細節、提供良好的接口、確保數據安全性等場景。它有助于構建模塊化、易于維護的代碼。

不變性: 封裝可以用于創建不變類(Immutable Class),即類的實例一旦創建就不能被修改,只能通過構造函數來初始化。

遮蔽(Shadowing)

是指一個作用域中使用了一個和外層作用域相同的變量名,導致局部變量“遮蔽”了外部變量,即無法直接訪問外部變量

局部變量遮蔽成員變量

this關鍵字

this關鍵字更詳細講解點擊這里
代表當前對象可以用于以下幾個方面:

  1. 引用當前對象的成員方法

  2. 引用當前對象的成員變量

  3. 調用當前對象的構造方法

this只能在類的實例方法、實例初始化和構造方法中使用。不能在靜態方法中使用。

總結

  1. 引用當前對象:

在類的非靜態方法中,this 引用當前對象,即調用該方法的對象實例。

  1. 訪問實例變量:

在類的方法中,可以使用 this 來訪問當前對象的實例變量。

  1. 調用構造方法:

在一個構造方法內部,可以使用 this() 調用當前類的其他構造方法,實現代碼的復用。

  1. 避免方法參數與實例變量同名:

當方法的參數名與實例變量同名時,可以使用 this 關鍵字來區分引用的是實例變量還是方法參數。

  1. 在構造方法中調用其他構造方法:

使用 this() 在構造方法中調用其他構造方法,以減少代碼冗余。

  1. 在匿名內部類中:

在匿名內部類中,如果需要引用外部類的實例,可以使用 外部類名.this。

  1. 在靜態方法中的限制:

this 不能在靜態方法中使用,因為靜態方法與特定對象實例無關。

  1. 構造方法中的 this 和 super 的關系:

構造方法中的 this() 和 super() 不能同時使用,因為它們都必須作為構造方法的第一行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40978.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux MQTT智能家居項目(智能家居界面布局)

文章目錄 前言一、創建工程項目二、界面布局準備工作三、正式界面布局總結 前言 一、創建工程項目 1.選擇工程名稱和項目保存路徑 2.選擇QWidget 3.添加保存圖片的資源文件: 在工程目錄下添加Icon文件夾保存圖片: 將文件放入目錄中: …

網絡層協議

網絡層協議 IP協議基本概念協議頭格式網段劃分特殊的IP地址IP地址的數量限制私有IP地址和公網IP地址路由IP協議頭格式后續 在復雜的網絡環境中確定一個合適的路徑 IP協議 承接上文,TCP協議并不會直接將數據傳遞給對方,而是交付給下一層協議,…

機器學習基礎(四)

KNN算法 KNN:K-Nearest Neighbor,最近領規則分類。 為了判斷位置實例的類別,以所有已知類別的實例作為參照選擇參數K。計算未知實例與所有已知實例的距離。(一般采用歐氏距離)選擇最近K個已知實例。根據少數服從多數的投票法則,讓未知實例歸類為K個最近鄰樣本中最多數的類…

音視頻FAQ(三):音畫不同步

摘要 本文介紹了音畫不同步問題的五個因素:編碼和封裝階段、網絡傳輸階段、播放器中的處理階段、源內容產生的問題以及轉碼和編輯。針對這些因素,提出了相應的解決方案,如使用標準化工具、選擇強大的傳輸協議、自適應緩沖等。此外&#xff0…

uniapp微信小程序區分正式版,開發版,體驗版

小程序代碼區分是正式版,開發版,還是體驗版 通常正式和開發環境需要調用不同域名接口,發布時需要手動更換 或者有些東西不想在正式版顯示,只在開發版體驗版中顯示,也需要去手動隱藏 官方沒有明確給出判斷環境的方法&a…

SciencePub學術 | CCF推薦重點計算機SCIE征稿中

SciencePub學術 刊源推薦: CCF推薦重點計算機SCIE征稿中!信息如下,錄滿為止: 一、期刊概況: CCF推薦重點SCIE簡介 【期刊簡介】IF:4.0,JCR2區,中科院3區; 【版面類型】正刊&#…

Swift 基礎

工程目錄 請點擊下面工程名稱,跳轉到代碼的倉庫頁面,將工程 下載下來 Demo Code 里有詳細的注釋 點擊下載代碼:swift-01

記錄一下基于jeecg-boot3.0的待辦消息移植記錄

因為之前沒有記錄,所以還要看代碼進行尋找,比較費勁,所以今天記錄一下: 1、后端 SysAnnouncementController 下面函數增加待辦的幾個顯示內容給前端用 具體代碼如下: /*** 功能:補充用戶數據&#xff0c…

由小波變換模極大值重建信號

給定信號, 令小波變換的尺度 則x(t)的二進小波變換為 令為取模極大值時的橫坐標,那么就是模極大值。 目標是由坐標、模極大值及最后一級的低頻分量重建信號x(t) 為了重建x(t),假定有一信號集合h(t),該集合中信號的小波變換和x(…

打印出二進制的奇數位和偶數位

void print(int a) {int i0;printf("奇數位:");for(i30;i>0;i-2){printf("%d ",(a>>i)&1);}printf("\n");printf("偶數位:");for(i31;i>1;i-2){printf("%d ",(a>>i)&1);} …

人臉圖像處理

1,人臉圖像與特征基礎 人臉圖像的特點 規律性: 人的兩只眼睛總是對稱分布在人臉的上半部分,鼻子和嘴唇中心點的連線基本與兩眼之間的連線垂直,嘴絕對不會超過眼鏡的兩端點(雙眼為d,則雙眼到嘴巴的垂直距離一般在0.8-1.25) 唯一性 非侵擾與便利性 可擴展性 人臉圖像的應用 身份…

Linux MQTT智能家居(溫度,濕度,環境監測,攝像頭等界面布局設置)

文章目錄 前言一、溫度濕度曲線布局二、環境監測界面布局三、攝像頭界面布局總結 前言 本篇文章來完成另外三個界面的布局設置。 這里會使用到 feiyangqingyun的一些控件庫。 一、溫度濕度曲線布局 TempHumtiy.h: #ifndef TEMPHUMTIY_H #define TEMPHUMTIY_H#include <…

pprof 三把刀

pprof 三把刀 看內存 go tool pprof http://127.0.0.1:6060/debug/pprof/heap?seconds30 看cpu go tool pprof http://127.0.0.1:6060/debug/pprof/profile?seconds30 看協程 go tool pprof http://localhost:6060/debug/pprof/goroutine 端口是自定義的&#xff0c;看看…

Golang原生實現JA3指紋修改,并支持Proxy代理

起因 抓取某個HTTPS網站的時候 開啟charles代理能夠抓取成功,關閉被風控 通過檢測,懷疑可能是tls的時候有區別 嘗試 golang的http中,Transport.TLSClientConfig是可以自定義設置的 但起初通過隨意設置并不能繞過風控 困難 使用golang的http客戶端,修改DialTLSContext函數的…

使用Python批量將Word文件轉為PDF文件

說明&#xff1a;在使用Minio服務器時&#xff0c;無法對word文件預覽&#xff0c;如果有需要的話&#xff0c;可以將word文件轉為pdf文件&#xff0c;再存儲到Minio中&#xff0c;本文介紹如何批量將word文件&#xff0c;轉為pdf格式的文件&#xff1b; 安裝庫 首先&#xff…

神經網絡基礎-神經網絡補充概念-12-向量化邏輯回歸的梯度輸出

代碼實現 import numpy as npdef sigmoid(z):return 1 / (1 np.exp(-z))def compute_loss(X, y, theta):m len(y)h sigmoid(X.dot(theta))loss (-1/m) * np.sum(y * np.log(h) (1 - y) * np.log(1 - h))return lossdef compute_gradient(X, y, theta):m len(y)h sigmoi…

Python系統學習1-9-類一之類語法

一、類之初印象 1、類就是空表格&#xff0c;將變量&#xff08;列名&#xff09;和函數&#xff08;行為&#xff09;結合起來 2、創建對象&#xff0c;表達具體行 3、創建類就是創建數據的模板 --操作數據時有提示 --還能再組合數據的行為 --結構更加清晰 4、類的內存分配…

vue項目根據word模版導出word文件

一、安裝依賴 //1、docxtemplaternpm install docxtemplater pizzip -S//2、jszip-utilsnpm install jszip-utils -S//3、pizzipnpm install pizzip -S//4、FileSaver npm install file-saver --save二、創建word模版 也就是編輯一個word文檔&#xff0c;文檔中需要動態取值的…

【JAVA】數組練習

? 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主頁&#xff1a;小胡_不糊涂的個人主頁 &#x1f4c0; 收錄專欄&#xff1a;淺談Java &#x1f496; 持續更文&#xff0c;關注博主少走彎路&#xff0c;謝謝大家支持 &#x1f496; 數組練習 1. 數組轉字符串2. 數組拷貝3.…

arm-linux-gnueabihf-g++ gcc編譯、優化命令 匯總

gcc優化選項&#xff0c;可在編譯時間&#xff0c;目標文件長度&#xff0c;執行效率三個維度&#xff0c;進行不同的取舍和平衡。 gcc 常用編譯選項 arm-linux-gnueabihf-g -O3 -marcharmv7-a -mcpucortex-a9 -ftree-vectorize -mfpuneon -mfpuvfpv3-fp16 -mfloat-abihard -…