Java學習筆記002——類的修飾符

在Java語言中,類的訪問修飾符決定了其它類能夠訪問該類的方式。類有如下4種訪問修飾符,在創建類時用于類的聲明:

1、public:

  • 當一個類被聲明為public時,它可以從任何其他類中被訪問,無論這些類位于哪個包中。
  • 通常,公共類包含公共的靜態方法,這些方法可以被其他任何類調用,以及公共的實例方法,這些方法可以被其他任何類的實例調用。
  • 頂層類只能是公開的或者是默認(包級私有)的。

2、protected:

  • protected訪問修飾符允許類被其所在包中的其他類以及所有子類訪問,無論子類是在哪個包中。
  • 這意味著,如果一個類是在包com.example中聲明的protected,那么com.example包中的任何其他類以及任何繼承自這個類的子類(無論它們在哪個包中)都可以訪問這個類。

3、默認訪問修飾符(無修飾符):

  • 當類沒有顯式聲明任何訪問修飾符時,它只能被其所在包中的其他類訪問。

這種訪問級別有時被稱為“包級私有”,因為它限制了類只能在同一個包內部被訪問。

4、private:

  • 在Java中,private訪問修飾符不能用于頂層類(即非內部類或非嵌套類)。
  • 它只能用于類的成員(如字段、方法、內部類等),表示這些成員只能在它們自己的類中被訪問。

下面是一個示例,展示了如何在Java中使用不同的訪問修飾符來聲明類:

// MyClass.java  
public class MyClass { // public 類  // 可以在任何地方被訪問  
}  // AnotherClass.java  
class AnotherClass { // 默認訪問修飾符(無修飾符)的類  // 只能在同一個包中被訪問  
}  // ProtectedClass.java  
protected class ProtectedClass { // protected 類  // 可以在同一個包中和所有子類中被訪問  
}  // InnerClass.java  
public class OuterClass {  protected class ProtectedInnerClass { // 嵌套類可以是 protected  // 可以在同一個包中和所有子類中被訪問  }  class DefaultInnerClass { // 默認訪問修飾符的嵌套類  // 只能在同一個包中被訪問  }  
}

在Java中,private訪問修飾符修飾的類不能用于頂層類(即非內部類或非嵌套類)。頂層類總是具有包級私有訪問權限:public,protectded,默認(沒有任何修飾符,也具有包級私有訪問權限)。

作為一個只能作為內部類的私有類,可以被在所在的頂層類中被實例化訪問:

(1)在頂層類的方法中實例化訪問;

(2)在頂層類中其它內部類中訪問。

package com.test;public class OuterClass {/*** 外部類(頂層類)OuterClass* 類中嵌套3個類:分別為私有(private),靜態(static),默認訪問修飾符(無修飾符)的類*/private class PrivateInnerClass {/*** PrivateInnerClass是一個私有內部類,只能在頂層類OuterClass中被訪問:* 1、可以在OuterClass中方法中創建實例訪問* 2、也可以在OuterClass中的內部其他類中的方法中訪問* PrivateInnerClass類也可以訪問頂層類OuterClass中的其它類。*/String name = "PrivateInnerClass.name";public void test() {// 創建內部類DefaultInnerClass的實例DefaultInnerClass a = new DefaultInnerClass();System.out.println("在私有內部類PrivateInnerClass類中調用DefaultInnerClass中屬性name:" + a.name);}}static class StaticNestedClass {// 這是一個靜態嵌套類,可以在任何地方被訪問,因為它具有包級私有訪問權限String name = "StaticNestedClass.name";}class DefaultInnerClass {// 這是一個默認訪問修飾符的內部類,只能在同一個包中的OuterClass中被訪問String name = "DefaultInnerClass.name";public void test() {StaticNestedClass a = new StaticNestedClass();System.out.println("在內部defalut類DefaultInnerClass中調用內部靜態類StaticNestedClass的屬性name:" +a.name);PrivateInnerClass b = new PrivateInnerClass();System.out.println("在內部defalut類DefaultInnerClass中調用內部私有類PrivateInnerClass的屬性name:" +b.name);}}// 定義print方法public void print(String str) {System.out.println(str);PrivateInnerClass a = new PrivateInnerClass();System.out.println("調用內部私有類PrivateInnerClass中的成員name" + a.name);a.test();StaticNestedClass b = new StaticNestedClass();System.out.println("調用內部靜態類StaticNestedClass中的成員name" + b.name);DefaultInnerClass c = new DefaultInnerClass();System.out.println("調用內部default類DefaultInnerClass中的成員name" + c.name);c.test();}
}

如上代碼驗證運行無誤,另外需要理解的知識點:

對后綴為.java的文件進行編譯,文件中的所有類都將被編譯為一個獨立的后綴為.class文件(java字節碼文件)。

對于一個頂層類中定義了一個或者多個內部類也是如此,但是內部類編譯后的.class類文件名是“頂層類名$私有類名.class"。編譯如上代碼OutClass.java文件,將產生如下幾個文件:

1、頂層類文件:OutClass.class

2、私有類文件:OuterClass$DefaultInnerClass.class,OuterClass$PrivateInnerClass.class,OuterClass$StaticNestedClass.class。

這是Java提供的一個強大特性,即可以在單個文件中組織多個相關的類,同時保持它們在編譯后的獨立性。

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

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

相關文章

uniapp使用vue3語法構建自定義導航欄,適配小程序膠囊

具體代碼 <template><view class"nav-wrapper-container" :style"height:navBarHeight px"><view class"nav-status-container" :style"height:navstatusBarHeight px;" /><view v-if"isCustom" clas…

數字化轉型導師堅鵬:BLM證券公司數字化轉型戰略

BLM證券公司數字化轉型戰略 ——以BLM模型為核心&#xff0c;實現知行果合一 課程背景&#xff1a; 很多證券公司存在以下問題&#xff1a; 不知道如何系統地制定證券公司數字化轉型戰略&#xff1f; 不清楚其它證券公司數字化轉型戰略是如何制定的&#xff1f; 不知道…

Redis 淘汰策略、持久化、高可用

淘汰策略 只有 redis 內存空間已滿并且往里面寫新數據&#xff0c;才會觸發淘汰策略。通過 expire / / /pexpire 讓 key-value 過期&#xff0c;從而讓 redis 清除這個 key-value。value 的數據結構typedef struct redisObject {unsigned tpye:4;unsigned encoding:4;// 判斷哪…

個人數倉開發面試題記錄

一.廣州電商公司 1.簡單自我介紹 2.介紹下之前的公司離線數倉項目 3.mysql和hive區別&#xff1f; 4.sql的執行順序&#xff1f; 5.hive的優化 6.說下你之前公司來&#xff0c;你的技能層次在每個公司&#xff1f;你怎么評價你的技能&#xff1f; 7.你的之前業務主要是做什么&…

Linux基礎命令[10]-cmp

文章目錄 1. cmp 命令說明2. cmp 命令語法3. cmp 命令示例3.1 不加參數3.2 -b&#xff08;顯示不同的字節&#xff09;3.3 -i&#xff08;跳過字節&#xff09;3.4 -l&#xff08;顯示所有不同&#xff09;3.5 -n&#xff08;比較n個字節&#xff09;3.6 -s&#xff08;不顯示信…

el-select 不能重復選擇

el-select 不能重復選擇&#xff0c;注意&#xff1a;刪除后可以再次重新被選擇 <el-form-item><el-select v-model"attribute.attributeSelect" change"changeSelect()" placeholder"請選擇屬性分組" clearable><el-optionv-fo…

PostgreSQL restartpoint 原理詳解

背景 大部分人對 PG 的 checkpoint 機制會熟悉一點&#xff0c;但是對 restartpoint 卻不太熟悉&#xff0c;網上介紹這方面的文章也比較少。因此&#xff0c;本文將以 PG 14.7 的社區代碼為基礎&#xff0c;介紹 PG 中的 restartpoint 機制。 原理介紹 什么是 restartpoint…

華為OD技術面試案例1-2024年

背景&#xff1a; 學校背景&#xff1a;211本科工作經驗&#xff1a;1年半轉行目標&#xff1a;測試崗位 一、機考 &#xff08;得分&#xff1a;350&#xff09; 二、01.04 hr面 自我介紹選擇東莞的原因對OD&#xff08;華為研發崗位&#xff09;的看法家庭情況簡歷相關問…

信息論筆記:信息量+熵+相對熵+交叉熵+損失函數

信息論 信息量 I(x) -log( P )I為信息量P為x發生的概率 熵 混亂程度的度量&#xff0c;不確定的局面表示很混亂系統里信息量的期望值H(x) -sum( P(i) * log( P(i) ) ) 相對熵(KL散度) 用于度量兩個概率分布間的差異性信息D_KL(S | O) sum( P_S(x) * log_2( 1 / P_O(x)…

Mysql學習之各種鎖

鎖 事務的隔離性由鎖來實現 MySQL并發事務訪問相同記錄 并發事務訪問相同記錄的情況大致可以分為3種&#xff1a; 讀-讀的情況 讀-讀情況&#xff0c;即并發事務相繼讀取相同的記錄。讀取操作本身不會對記錄由有任何的影響&#xff0c;并不會引起什么問題&#xff0c;所以允許…

簡要講解OV7725攝像頭

本文主要包含以下幾部分內容&#xff1a; 1. 通過OV7725分析模塊原理圖。 2. 講解部分寄存器的含義、RGB565格式圖像輸出時序、幀率計算。 3. 講解SCCB協議與I2C協議的區別。 1、OV7725功能 OV7725是一款1/4英寸單芯片圖像傳感器&#xff0c;其感光陣列達到640*480&#xff0c…

LibreOJ 137. 最小瓶頸路(加強版) 題解 Kruscal重構樹 ST表

聲明&#xff1a;本題目是LibreOJ 136. 最小瓶頸路 題解 最小生成樹 倍增加強版&#xff0c;建議先學習簡單版的做法。 題目鏈接&#xff1a;LibreOJ 137. 最小瓶頸路&#xff08;加強版&#xff09; 題目描述&#xff1a; 給定一張無向圖&#xff0c;詢問兩個結點之間的最小瓶…

【MySQL 系列】在 Windows 上安裝 MySQL

在 Windows 平臺上安裝 MySQL 很簡單&#xff0c;并不需要太復雜的步驟。按照本文的步驟操練起來就可以了。 文章目錄 1、下載 MySQL 安裝程序2、安裝 MySQL 數據庫2.1、選擇安裝類型2.2、檢查所需組件2.3、安裝所選產品組件2.4、產品配置2.5、配置高可用性2.6、配置服務器類型…

【leetcode】 劍指 Offer學習計劃(java版本含注釋)(下)

目錄 前言第十六天&#xff08;排序&#xff09;劍指 Offer 45. 把數組排成最小的數&#xff08;中等&#xff09;劍指 Offer 61. 撲克牌中的順子&#xff08;簡單&#xff09; 第十七天&#xff08;排序&#xff09;劍指 Offer 40. 最小的k個數&#xff08;簡單&#xff09; 第…

c++11多線程:call_once

文章目錄 call_once示例一示例二 call_once std::call_once是 C11 標準庫中的一個函數&#xff0c;用于確保某個函數只會被調用一次。 單例設計模式是一種常見的設計模式&#xff0c;用于確保某個類只能創建一個實例。由于單例實例是全局唯一的&#xff0c;因此在多線程環境中…

YOLO系列中的“data.yaml”詳解!

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、data.yaml介紹 YOLO系列中的data.yaml文件包含了YOLO系列模型運行所需要的數據集路徑、數據集中的類別數及標簽。數據集路徑可以用絕對路徑也可以…

Python實現股票信息查詢

目前兩個常用的股票信息CPI&#xff1a; 騰訊行情CTPAPI接口源碼 新浪行情CTPAPI 使用requests模塊爬取股票信息&#xff0c;這里以查詢股票市值為例。 一、根據股票名稱查詢股票代碼 在python文件夾下設置兩個表格GPLIST.xlsx&#xff0c;其中是A股全部代碼和股票名稱&#…

如何在飛書接入ChatGPT并結合內網穿透實現公網遠程訪問智能AI助手

文章目錄 前言環境列表1.飛書設置2.克隆feishu-chatgpt項目3.配置config.yaml文件4.運行feishu-chatgpt項目5.安裝cpolar內網穿透6.固定公網地址7.機器人權限配置8.創建版本9.創建測試企業10. 機器人測試 前言 在飛書中創建chatGPT機器人并且對話&#xff0c;在下面操作步驟中…

MySQL 高可用解決方案(雙主雙從)

1.環境說明 操作系統&#xff1a;centos7.7 主服務器&#xff1a;node2(192.168.1.102) 從服務器&#xff1a;node3(192.168.1.103) keepalived中虛擬ip(VIP):192.168.1.100 2.準備事項 主庫和從庫數據庫的版本一致把主庫的數據同步給從庫一份 #對主庫進行全局讀鎖定 FLUSH…

GEE代碼條帶問題——sentinel-1接縫處理的問題

問題 我有興趣確定 NDVI 損失最大的年份。我創建了一個函數來收集所有陸地衛星圖像并應用預處理。當我導出結果以識別 NDVI 損失最大年份時&#xff0c;生成的數據產品與陸地衛星場景足跡有可怕的接縫線。造成這種情況的原因是什么以及如何調整代碼&#xff1f; sentinel1數據…