java的四種訪問權限_Java四種訪問權限

一、訪問權限簡介

訪問權限控制: 指的是本類及本類內部的成員(成員變量、成員方法、內部類)對其他類的可見性,即這些內容是否允許其他類訪問。Java 中一共有四種訪問權限控制,其權限控制的大小情況是這樣的:

public > protected > default(包訪問權限) > private

public:Java語言中訪問限制最寬的修飾符,一般稱之為“公共的”。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包訪問。

protected:介于public 和 private 之間的一種訪問修飾符,一般稱之為“保護訪問權限”。被其修飾的屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。對外包的非子類是不可以訪問。

default:即不加任何訪問修飾符,通常稱為“默認訪問權限“或者“包訪問權限”。該模式下,只允許在同一個包中進行訪問,外包的所有類都不能訪問。

private:Java語言中對訪問權限限制的最窄的修飾符,一般稱之為“私有的”。被其修飾的屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。

注意:

1、所謂的訪問,可以分為兩種不同方式:通過對象實例訪問;直接訪問。

比如說,某父類protected權限的成員,子類是可以直接訪問的,換一種說法是子類其實繼承了父類的除了private成員外的所有成員,包括protected成員,所以與其說是子類訪問了父類的protected成員,不如說子類訪問了自己的從父類繼承來的protected成員。另一方面,如果該子類與父類不在同一個包里,那么通過父類的對象實例是不能訪問父類的protected成員的。

2、要區分開 protected 權限、包訪問權限,正確使用它們;

當某個成員能被所有的子類繼承,但不能被外包的非子類訪問,就是用protected;

當某個成員的訪問權限只對同包的類開放,包括不能讓外包的類繼承這個成員,就用包訪問權限;

3、使用訪問權限控制的原因:

1)使用戶不要碰觸那些他們不該碰觸的部分;

2)類庫設計者可以更改類的內部工作的方式,而不會擔心這樣會對用戶產生重大影響;

二、下面用表格來展示四種修飾符的訪問權限范圍。列所指定的類是否有權限允許訪問行的權限控制下的內容:

AAffA0nNPuCLAAAAAElFTkSuQmCC

三、訪問權限控制的使用場景

訪問權限使用的場景可以總結為下面的五種場景,分別對訪問權限的使用有不同的限制:

1、外部類的訪問控制

外部類(外部接口) 是相對于內部類(也稱為嵌套類)、內部接口而言的。外部類的訪問控制只能是這兩種:public、default 。

//public 訪問權限的外部類,所有類都可以使用這個類

public class OuterClass {

}

//default 訪問權限的外部接口,所有類、接口均可以使用此接口

interface OuterInterface{

}

2、類里面的成員的訪問控制

類里面的成員分為三類:成員變量、成員方法、成員內部類(內部接口)

類里面的成員的訪問控制可以是四種,也就是可以使用所有的訪問控制權限

public class OuterClass {

public int aa; //可以被所有的類訪問

protected boolean bb; //可以被所有子類以及本包的類使用

void cc() { //default 訪問權限,能在本包范圍內使用

System.out.println("包訪問權限");

}

//private權限的內部類,即這是私有的內部類,只能在本類使用

private class InnerClass{

}

}

注意:

這里的類里面的成員是指類的全局成員,并沒有包括局部的成員(局部變量、局部內部類,沒有局部內部接口)。或者說,局部成員是沒有訪問權限控制的,因為局部成員只在其所在的作用域內起作用,不可能被其他類訪問到。

public void count(){

//局部成員變量

public int amount;//編譯無法通過,不能用public修飾

int money;//編譯通過

//局部嵌套接口

class customer{//編譯通過

}

}

上面的兩種場景幾乎可以適應所有的情況,但有一些情況比較特殊,還做了有些額外訪問權限的要求。

3、抽象方法的訪問權限

普通方法是可以使用四種訪問權限的,但抽象方法是有一個限制:不能用private 來修飾,也即抽象方法不能是私有的。否則,子類就無法繼承實現抽象方法。

4、接口成員的訪問權限

接口由于其自身特殊性,所有成員的訪問權限都規定得死死的。下面是接口成員的訪問權限:

變量: public static final

抽象方法: public abstract

靜態方法: public static,JDK1.8后才支持

內部類、內部接口 : public static

也因為所有的一切都默認強制規定好了,所以我們在用的時候,并不一定需要完整寫出所有的修飾符,編譯器會幫我們完成的。也就是,可以少寫修飾符,但不能寫錯修飾符。

public interface Interface_Test {

public int aa = 6; //少寫了 static final

int bb = 5; //

//嵌套接口,可以不寫public static

interface cc{

}

}

5、構造器的訪問權限

構造器的訪問權限可以是以上四種權限中的任意一種:

A 采用 private:一般是不允許直接構造這個類的對象,再結合工廠方法(static方法),實現單例模式。注意:所有子類都不能繼承它。

B 采用包訪問控制:比較少用,這個類的對象只能在本包中使用,但是如果這個類有static 成員,那么這個類還是可以在外包使用;(也許可以用于該類的外包單例模式)。

注意:外包的類不能繼承這個類。

C 采用 protected:就是為了能讓所有子類繼承這個類,但是外包的非子類不能訪問這個類。

D 采用 public:對于內外包的所有類都是可訪問的;

注意: 構造方法有點特殊。因為子類的構造器初始化時,都要調用父類的構造器,所以一旦父類構造器不能被訪問,那么子類的構造器調用失敗,意味著子類繼承父類失敗!

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

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

相關文章

java分割漢字_Java分割中英文,并且中文不能分割一半?

最近準備入其他坑位。在面試過程中,遇到下面這題筆試題,拿出來分享分享。題目:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。但是要保證漢字不被截半個,如“我ABC”4&…

full gc JAVA_java觸發full gc的幾種情況概述

前言近期被問及這個問題,在此記錄整理一下。System.gc()方法的調用此方法的調用是建議JVM進行Full GC,雖然只是建議而非一定,但很多情況下它會觸發 Full GC,從而增加Full GC的頻率,也即增加了間歇性停頓的次數。強烈影響系建議能不使用此方法就別使用,讓…

java excel條件格式_Java 設置Excel條件格式(高亮條件值、應用單元格值/公式/數據條等類型)...

概述在Excel中,應用條件格式功能可以在很大程度上改進表格的設計和可讀性,用戶可以指定單個或者多個單元格區域應用一種或者多種條件格式。本篇文章,將通過Java程序示例介紹條件格式的設置方法,設置條件格式時,因不同設…

java order()_java.util.Collections.reverseOrder()

描述reverseOrder()方法被用來獲取強加實現可比接口的對象collection的自然順序相反的比較器。聲明以下是java.util.Collections.reverseOrder()方法的聲明。public static Comparator reverseOrder()參數NA返回值方法調用返回一個比較器,該比較器對實現Comparable接…

jsp mysql登錄 demo_java jsp+servlet+mysql實現登錄網頁設計

涉及以下幾個文件:1。登錄頁面 login.jsp2,成功跳轉頁面 success.jsp3,失敗跳轉頁面 fail.jsp4,servlet 處理類 LoginTestServlet.java5,配置文件 web.xml--------------------------------------------- 依次看代碼 …

libsvm java下載_一個基于LIBSVM(JAVA)的股票預測demo

【實例簡介】一個基于LIBSVM的股票價格預測程序,采用隨機森林算法對樣本進行訓練和預測,使用的編程語言為JAVA。【實例截圖】【核心代碼】stock-master└── stock-master├── data│ ├── 000752.csv│ ├── 300251.csv│ ├── 300329.c…

mysql 家譜樹查詢_中國家譜族譜數據庫可以登錄、查詢了

原標題:中國家譜族譜數據庫可以登錄、查詢了中青在線武漢6月6日電(黨波濤 中國青年報中青在線記者 雷宇)數據量全球第一,最早可追溯到明朝萬歷年間。華中師范大學中國農村研究院今天對外發布,由該院建設的中國家譜族譜數據庫正式上線&#xf…

mysql-5.5.56配置_mysql 5.5.56免安裝版配置方法

mysql 5.5.56免安裝版配置方法發布時間:2020-10-18 23:16:23來源:腳本之家閱讀:74作者:阿安安mysql 5.5.56免安裝版配置方法,本文通過文字代碼詳解,具體內容如下所示:1. 下載mysql-5.5.56-winx6…

MySQL命令梳理_MySQL操作命令梳理(2)

一、表操作在mysql運維操作中會經常使用到alter這個修改表的命令,alter tables允許修改一個現有表的結構,比如增加或刪除列、創造或消去索引、改變現有列的類型、或重新命名列或表本身,也能改變表的注釋和表的類型。下面就針對alter修改命令的…

java 進度條_進度條Java

你必須使用線程.設計一個實現Runnable接口的類,它將更新這樣的值.class ProgressBarUpdator implements java.lang.Runnable {/*** Progress bar that shows the current status*/private javax.swing.JProgressBar jpb null;/*** Progress bar value*/private java.lang.Inte…

java 文件存儲_文件存儲學生信息(JavaIO流)

package com;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.Scanner;/*** author Administrator*1.要求:有五個學生,每個學生有姓名、年齡 、成績三個屬性&a…

位運算java_Java中的位運算

Java中的位運算,說實話,工作了兩年的時間里,從來沒有用過一次,因為平時都是些的是業務代碼,很少接觸比較底層的東西,我記得第一次在代碼中看到還是在HashMap的Hash算法中看到的,這次重拾Java基礎…

java藍橋杯dfs_第七屆 藍橋杯決賽 Java B組 打靶 解題報告(DFS,回溯,全排列)-Go語言中文社區...

題目:打靶小明參加X星球的打靶比賽。比賽使用電子感應計分系統。其中有一局,小明得了96分。這局小明共打了6發子彈,沒有脫靶。但望遠鏡看過去,只有3個彈孔。顯然,有些子彈準確地穿過了前邊的彈孔。不同環數得分是這樣設…

guid mysql_關于MySQL:MySQL-如何搜索GUID

我正在使用第三方.NET庫(Rhino Security),將其標識符存儲為mysql數據庫中binary(16)字段中的向導。 一切都可以從該應用程序完美地工作,但是當我嘗試通過查詢編輯器(對于MySQL為TOAD)手動運行查詢時,沒有行返回我知道存在的標識符。 例如&…

java 單例 生命周期_Rhythmk 一步一步學 JAVA (13) Spring-2 之Ben懶加載以及生命周期,單例...

1、定義Demo類:package com.rhythmk.spring;public class User {public void Init (){System.out.println("User 對象被 創建!");}// 計數器public int Count0;public void Say(){this.Count;System.out.println("User 被"this.Coun…

java 高級泛型_java泛型的高級應用

展開全部在上面的例子中,由于沒有限制class GenericsFoo類型持有者T的范圍,實際上這里32313133353236313431303231363533e59b9ee7ad9431333339666666的限定類型相當于Object,這和“Object泛型”實質是一樣的。限制比如我們要限制T為集合接口類…

java窗體線條切換消失_java – 如何更改apache poi生成的圖表不使用平滑線條并將空單元格顯示為間隙?...

我使用的是POI 3.12-beta1,并且代碼可以在圖例中創建包含多個數據集和命名系列的折線圖.但是,poi中折線圖的默認設置會生成一條已在數據點上平滑的線.空值也被繪制為0,但我們希望這些線在第一列停止,其中有一個空單元格.一旦在xlsx文件中呈現并更改這些設置,我就可以進入圖表屬…

java正則表達式 問號_正則表達式問號的四種用法詳解

正則表達式問號的四種用法詳解原文符號因為?在正則表達式中有特殊的含義,所以如果想匹配?本身,則需要轉義,\?有無量詞問號可以表示重復前面內容的0次或一次,也就是要么不出現,要么出現一次。非貪婪匹配貪婪匹配在滿…

java alert跳頁面_JavaScript中通過提示框跳轉頁面的方法

通過提示框跳轉頁面具體代碼如下所示:Documentwindow.onload function(){ //設置當頁面加載時執行var btn document.getElementsByTagName("button")[] //獲取btn元素btn.onclick function(){ //給button加上一個點擊事件var answer confirm("是否…

java jsp if else if_jsp頁面使用if else語句 | 學步園

jsp頁面嵌入java語句使用即可,但是在使用if else語句時一定要注意使用是標點的使用,在語句中分號不能寫,不符合jsp頁面的語法規則,若多寫了則會報錯:如下:{name: priceRA, type: string}, {name: priceRB, type: string}, {name: priceRC, type: string},{name: priceRD, typ…