java 修飾符默認_Java和C#默認訪問修飾符

C#中:

針對下面幾種類型內部成員的訪問修飾符:

enum的默認訪問修飾符:public。

class的默認為private。

interface默認為public。

struct默認為private。

其中:

public可以被任意存取;

protected只可以被本類和其繼承子類存取;

internal只可以被本組合體(Assembly)內所有的類存取,組合體是C#語言中類被組合后的邏輯單位和物理單位,其編譯后的文件擴展名往往是 “.DLL”或“.EXE”。

protected internal唯一的一種組合限制修飾符,它只可以被本組合體內所有的類和這些類的繼承子類所存取。

private只可以被本類所存取。

看:

c# 的訪問修飾符是private 還是 internal?

準確的說,不能一概而論。

[MSDN]

Classes and structs that are not nested within other classes or structs can be either public or internal. A type deleted as public is accessible by any other type. A type deleted as internal is only accessible by types within the same assembly. Classes and structs are deleted as internal by default unless the keyword public is added to the class definition, as in the previous example. Class or struct definitions can add the internal keyword to make their access level explicit. Access modifiers do not affect the class or struct itself — it always has access to itself and all of its own members.

類(class)或結構(struct)如果不是在其它類或結構中的話,它的訪問類型要不就是internal, 要不就是public;

換句話說,如果它在其它類或結構中的話,則可以為private 或protected等。下面我說的類和結構,如無特殊說明,均指非"類中類"

類或結構的默認訪問類型是internal.

類中所有的成員,默認均為private。

[MSDN]

Interfaces, like classes, can be deleted as public or internal types. Unlike classes, interfaces default to internal access. Interface members are always public, and no access modifiers can be applied.

Namespaces and enumeration members are always public, and no access modifiers can be applied.

Delegates have internal access by default.

Any types deleted within a namespace or at the top level of a compilation unit (for example, not within a namespace, class, or struct) are internal by default, but can be made public.

接口默認訪問符是internal

接口的成員默認訪問修飾符是public,也不可能是其他訪問修飾符

命名空間,枚舉類型成員默認public,也不可能是其他訪問修飾符

委托,默認internal

在命名空間內部或編譯單元頂部的所有類型,默認是internal,可以人為改為public。

java

1、Class類的訪問權限:

默認:默認可以稱為friendly但是,java語言中是沒有friendly這 個修飾符的,這樣稱呼應該是來源于c++。默認的訪問權限是包級訪問權限。

即如果寫了一個類沒有寫訪問權限修飾符,那么就是默認的訪問權限,同一個包下的類都可以訪問到,即使可以實例化該類 (當然如果這個類不具有實例化的能力除外,比如該類沒有提供public的構造函數)。

public:可以供所有的類訪問。

說明:

1)、每個編譯單元(類文件)都僅能有一個public class 。

2)、public class的名稱(包含大小寫)必須和其類文件同名。

3)、一個類文件(*.java)中可以不存在public class。

這種形式的存在的場景:如果我們在某個包內撰寫一個class,僅僅是為了配合同包內的其他類工作。

4)、class不可以是private和protected。

5)、如果不希望那個任何產生某個class的對象,可以將該類得所有構造函數設置成private。但是即使這樣也可以生成該類的對象,就是class的 static的成員(屬性和方法)可以辦到。

2、類成員變量的訪問權限:

public:緊接public的屬性任何類都可以訪問到。但是從類的封裝性上來考 慮將一個類的屬性定義成public一般很少使用, 在定義靜態常量的時候通暢會這樣定義。如:public static final int PAGE_SIZE=10;

private:只有類本身內部的方法可以訪問類的private屬性,當然內部類也可以訪問其外部類的private成員的。(屬性和方法)

默認(friendly):包級可見,同一個包內的類可以訪問到這個屬性但 是從類的封裝性特性來說很少這樣使用類的屬性的。

protected:關鍵字所處理的是所謂“繼承”的觀念。對于同一包的其他類,protected=默認,對于不同包的類,如果存在繼承關系, 而baseClass存在protected屬性,則可以被其自繼承,而不同包的其他類

則不能訪問類的protected屬性。

3、類的成員方法的訪問權限:

其從語法角度來講,這些訪問權限控制符作用于類的方法和作用于類的屬性上的效果是一樣的。

public:所有類可見。

pirvate:只有同一類內部的方法可見,在有就是內部類也可以訪問到。

默認(friendly):包內可見。

protected:繼承可見。

訪問權限存在的理由

1)、“讓使用者無法碰觸到他們不該碰觸的東西。”這些東西僅供類的內部機制使用。將某些成員聲明成private,對于使用者來說可以說是一種服 務,

因為這樣使用者可以知道哪些是他關注的哪些是不重要的,不需要關注,如此歷來對于使用來說降低了對使用對象認識的難度。

2)、(最重要的理由)讓程序設計者可以更動class內部運作方式,而無須擔心波及到客戶端程序。

3)、java的“訪問權限修飾符”賦予classes開發者極具有價值的控制能力。 身為classes開發者,如果你的任何改變可以完全不干擾你的使用者,

你便可以安心改變你的底層實現,因為客戶端程序員無法訪問class的這一部分。

通過今天學習訪問權限的問題了解到,接口或者抽象等等策略所謂的“實現隱藏”其根本原因并不是說為了隱藏實現的代碼和思路,而是降低使用者的使用 難度,以及從維護角度來說可見范圍的控制給程序維護帶來了極大的安全性。

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

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

相關文章

JavaScript中帶有示例的Math.abs()方法

JavaScript | Math.abs()方法 (JavaScript | Math.abs() Method) Math operations in JavaScript are handled using functions of math library in JavaScript. In this tutorial on Math.abs() method, we will learn about the abs() method and its working with examples.…

人臉識別python face_recognize_python2.7使用face_recognition做人臉識別

偶然看到一篇文章,說是可以實時人臉識別,很有興趣就自己按照文章開始動手人臉識別,但是實現過程中遇到了幾個問題這里做個總結,希望可以幫助到大家安裝face_recognition這個之前需要先安裝編譯dlib,如果沒有安裝dlib&a…

c# reverse_清單 .Reverse()方法,以C#為例

c# reverseC&#xff03;List <T> .Reverse()方法 (C# List<T>.Reverse() Method) List<T>.Reverse() method is used to reverse the all list elements. List <T> .Reverse()方法用于反轉所有列表元素。 Syntax: 句法&#xff1a; void List<T&…

cpuinfo詳解

cat /proc/cpuinfo processor: 23&#xff1a;超線程技術的虛擬邏輯核第24個 ###一般看最后一個0...23 表示24線程 vendor_id: GenuineIntel&#xff1a;CPU制造商cpu family: 6&#xff1a;CPU產品系列代號model: 44&#xff1a;CPU屬于其系列中的哪一代號model name: Intel…

jvm延遲偏向_用于偏向硬幣翻轉模擬的Python程序

jvm延遲偏向Here, we will be simulating the occurrence coin face i.e. H - HEAD, T - TAIL. Simply we are going to use an inbuilt library called as random to call a random value from given set and thereby we can stimulate the occurrence value by storing the o…

java項目沒有bin_WebAPI項目似乎沒有將轉換后的web.config發布到bin文件夾?

我很擅長.NET配置轉換 . 我現在將它們放在用于數據使用的類庫和WPF應用程序上 .但是&#xff0c;當我嘗試使用ASP.NET WebAPI項目進行設置時&#xff0c;似乎發生了一些奇怪的事情 .配置文件永遠不會顯示在我的bin目錄中&#xff0c;因此web.config始終顯示為預先形成的配置文件…

opengl es的射線拾取

2019獨角獸企業重金招聘Python工程師標準>>> 在opengl中關于拾取有封裝好的選擇模式&#xff0c;名字棧&#xff0c;命中記錄&#xff0c;實現拾取的功能&#xff0c;相對容易一些。但是到了opengl es里面就比較倒霉了&#xff0c;因為opengl es是opengl的簡化版&am…

java timezone_Java TimeZone useDaylightTime()方法與示例

java timezoneTimeZone類useDaylightTime()方法 (TimeZone Class useDaylightTime() method) useDaylightTime() method is available in java.util package. useDaylightTime()方法在java.util包中可用。 useDaylightTime() method is used to check whether this time zone u…

視覺學習(4) —— 添加地址傳遞數據

Modbus Slave 選擇一個地址右鍵&#xff0c;選擇發送的數據類型 視覺軟件 一、添加地址 當地址為100時&#xff0c;先將首地址改為100&#xff0c;第0個地址為100&#xff0c;第1個地址為101&#xff0c;往后累加 若想使用100—150的地址&#xff0c;即首地址為100&#xff…

某個JAVA類斷點無效_解決eclipse中斷點調試不起作用的問題

最近幾天&#xff0c;遇到了一個問題&#xff0c;就是在eclipse中進行斷點調試程序到時候&#xff0c;跟蹤不到我設置的斷點。困惑了很久&#xff0c;在網上也查閱了很多資料&#xff0c;都沒能解決我的問題。今天早上&#xff0c;我試著把eclipse的工作空間重新換了一個&#…

jquery中阻止事件冒泡的方法

2019獨角獸企業重金招聘Python工程師標準>>> 根據《jquery基礎教程》 第一種方法&#xff1a;判斷事件的“直接”目標是否是自身&#xff0c;如果不是自身&#xff0c;不予處理 $(div.outter).click(function(event) {if (event.target this) {$(p).css(color, red…

java swing 組織機構_課內資源 - 基于Java Swing的小型社團成員管理系統

一、需求分析1.1 個人信息學號、姓名、性別、年級、系別、專業、出生日期、聯系方式、個性簽名、地址、照片。1.2 基本功能要求管理員信息管理登錄、注銷功能修改密碼功能部落成員信息管理添加成員刪除成員修改成員信息按條件查找篩選成員1.3 高級特性管理員權限管理成員信息包…

Java System類loadLibrary()方法與示例

系統類loadLibrary()方法 (System class loadLibrary() method) loadLibrary() method is available in java.lang package. loadLibrary()方法在java.lang包中可用。 loadLibrary() method is used to load the library with the given parameter named library_name(library …

CCF201509-2 日期計算(100分)

試題編號&#xff1a; 201509-2 試題名稱&#xff1a; 日期計算 時間限制&#xff1a; 1.0s 內存限制&#xff1a; 256.0MB 問題描述&#xff1a; 問題描述給定一個年份y和一個整數d&#xff0c;問這一年的第d天是幾月幾日&#xff1f;注意閏年的2月有29天。滿足下面條件之一的…

Java StringBuilder trimToSize()方法與示例

StringBuilder類trimToSize()方法 (StringBuilder Class trimToSize() method) trimToSize() method is available in java.lang package. trimToSize()方法在java.lang包中可用。 trimToSize() method is used to minimize storage used for the characters (i.e. if the init…

第一百四十一節,JavaScript,封裝庫--DOM加載

JavaScript&#xff0c;封裝庫--DOM加載 DOM加載&#xff0c;跨瀏覽器封裝DOM加載&#xff0c;當網頁文檔結構加載完畢后執行函數&#xff0c;不等待圖片音頻視頻等文件加載完畢 /** dom_jia_zai()函數&#xff0c;DOM頁面加載函數&#xff0c;等待頁面結構加載完畢后就執行函數…

java 使用接口便于維護程序_Java初學——面向對象接口的應用

一、接口1.什么是接口接口是比抽象類更抽象的定義&#xff0c;接口不可以被實例化 實現類必須實現接口的所有方法 實現類可以實現多個接口 、多個接口使用逗號隔開 接口中的變量都是靜態常量(public static final) 程序設計時面向接口的約定而不考慮具體實現 。2.為什么使用接口…

Java ResourceBundle getLocale()方法與示例

ResourceBundle類的getLocale()方法 (ResourceBundle Class getLocale() method) getLocale() method is available in java.util package. getLocale()方法在java.util包中可用。 getLocale() method is used to get the locale of this ResourceBundle. getLocale()方法用于獲…

centos下安裝pip時失敗:

2019獨角獸企業重金招聘Python工程師標準>>> [rootwfm ~]# yum -y install pip Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.tuna.tsinghua…