protected和默認訪問許可權
1. java中private,protected,public和default的區別
private,public,protected,默認不寫(firendly)
1、Class類的訪問許可權:
public:可以供所有的類訪問。
默認:默認可以稱為friendly但是,Java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來源於c++。默認的訪問許可權是包級訪問許可權。
即如果寫了一個類沒有寫訪問許可權修飾符,那麼就是默認的訪問許可權,同一個包下的類都可以訪問到,即使可以實例化該類
(當然如果這個類不具有實例化的能力除外,比如該類沒有提供public的構造函數)。
說明:
1、每個編譯單元(類文件)都僅能有一個publicclass
2、publicclass的名稱(包含大小寫)必須和其類文件同名。
3、一個類文件(*.java)中可以不存在publicclass。
這種形式的存在的場景:如果我們在某個包內撰寫一個class,僅僅是為了配合同包內的其他類工作,而且
我們不想再為了撰寫說明文檔給客戶(不一定是現實意義的客戶,可能是調用這個類的類)看而傷腦筋,而且有可能過一段時間之後
有可能會徹底改變原有的做法,並完全舍棄舊版本,以全新的版本代替。
4、class不可以是private和protected。
5、如果不希望那個任何產生某個class的對象,可以將該類得所有構造函數設置成private。但是即使這樣也可以生成該類的對象,就是class的static的成員(屬性和方法)可以辦到。
2、類成員變數的訪問許可權:
public:緊接public的屬性任何類都可以訪問到。可以直接使用ClassName.propertyName。但是從類的封裝性上來考慮將一個類的屬性定義成public一般很少使用,
在定義靜態常量的時候通暢會這樣定義。如:publicstaticfinalintPAGE_SIZE=10;
private:只有類本身內部的方法可以訪問類的private屬性,當然內部類也可以訪問其外部類的private成員的。(屬性和方法)
默認(friendly):包級可見,同一個包內的類可以訪問到這個屬性,可以直接使用className.propertyName來訪問,但是從類的封裝性特性來說很少這樣使用類的屬性的。
protected:關鍵字所處理的是所謂「繼承」的觀念。對於同一包的其他類,protected=默認,對於不同包的類,如果存在繼承關系,而baseClass存在protected屬性,則可以被其自繼承,而不同包的其他類
則不能訪問類的protected屬性。
3、類的成員方法的訪問許可權:
其從語法角度來講,這些訪問許可權控制符作用於類的方法和作用於類的屬性上的效果是一樣的。
public:所有類可見。
pirvate:只有同一類內部的方法可見,在有就是內部類也可以訪問到。
默認(friendly):包內可見。
protected:繼承可見。
4、訪問許可權存在的理由
1、「讓使用者無法碰觸到他們不該碰觸的東西。」這些東西僅供類的內部機制使用。將某些成員聲明成private,對於使用者來說可以說是一種服務,
因為這樣使用者可以知道哪些是他關注的哪些是不重要的,不需要關注,如此歷來對於使用來說降低了對使用對象認識的難度。
2、(最終要的理由)讓程序設計者可以更動class內部運作方式,而無須擔心波及到客戶端程序。
java的「訪問許可權修飾符」賦予classes開發者極具有價值的控制能力。身為classes開發者,如果你的任何改變可以完全不幹擾你的使用者,
你便可以安心改變你的底層實現,因為客戶端程序員無法訪問class的這一部分。
2. java中四種訪問許可權修飾符的各種情況介紹(最好是個人心得!!)、簡明易懂些的
訪問修飾符有四種public protected 默認的不寫的 private
要區分的重點 在同包中的類和不同包中類中的訪問 (注意這里是指類和類之間的訪問許可權)
同包的類是指寫在一個文件夾中的類,不同包中的類是指寫在不同文件夾中的類(如不同項目和不同包都是這個范疇)
下面關鍵的許可權問題了
public 訪問許可權最大,同包(同文件夾)裡面的類絕對是可以互相訪問的,不同包中的類只要經過import得到了路徑後也是可以通過類的對象訪問的
protected 和 默認的比public訪問許可權都要小(不能在其他包中被訪問除非繼承這里是指protected)但他們兩之間有細微的區別就是在不同包中的類繼承protected和 默認的時候 ,繼承的類能夠訪問用protected修飾的成員而不能訪問默認即不寫修飾符的成員
private 范圍最小 只能在類內部的成員之間進行訪問,外部的類是絕對沒有辦法通過對象訪問到私有成員的,繼承的類也不會繼承private的成員(完全手打)
3. java四種許可權修飾符
java有四種訪問許可權修飾符,分別是:public、protected、private和包訪問(即默認,什麼都不加)。
private,只有本類可以訪問。
protected,本類、相同包、其它包中的子類可以訪問。
public本類、相同包、其它包都能訪問。
包訪問(默認),相同包可以訪問。
4. 說明java中public、protected、default、private四個訪問控制修飾的作用
關於訪問控制,private,default,protected,public,不加任何訪問許可權限定的成員採用的默認訪問許可權,也就是default或者package,可以被這個類本身和同一個包中的類所訪問;private對訪問許可權的限制最大,修飾那些不想讓外界訪問的數據和方法,表示私有的,這有利於數據的安全和數據的一致性,同樣如果以個類的構造方法被申明為private其他不能生成該類的實例對象;protected申明的成員可以被這個類本身和他的子類以及同一個包中所有其他類訪問;帶有public的成員可以被所有的類訪問。
5. public private protected和默認的區別
public private protected和默認的區別?如下:
第一, 類的成員不寫訪問修飾時默認為default。默認對於同一個包中的其他類相當於公開(public),對於不是同一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關系的類相當於私有。
總結如下表
第二,在說明這四個關鍵字之前,我想就class之間的關系做一個簡單的定義:對於繼承自己的class,base class可以認為他們都是自己的子女,而對於和自己一個目錄下的classes,認為都是自己的朋友。
1、public:對所有用戶開放,所有用戶都可直接調用
2、private:私有。除了class自己之外,任何人都不可直接使用,私有財產神聖不可侵犯嘛,即便是子女,朋友,都不可使用。
3、protected:對於子女、朋友來說,就是public的,可自由使用,無任何限制;而對於其他的外部class,protected就變成private。(同一個包中的類,若不在同一個包中,必須為其子孫類才可使用)
4、默認:默認可以稱為friendly,但是java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來源於c++。默認的訪問許可權是包級訪問許可權。
第三,另外補充說明:
1.每個編譯單元(類文件)都僅能有一個public class
2.public class的名稱(包含大小寫)必須和其類文件同名。
3.一個類文件(*.java)中可以不存在public class。
如果我們在某個包內撰寫一個class,僅僅是為了配合同一包內的其他類工作,並且我們不想再為了撰寫說明文檔給客戶(不一定是現實意義的客戶,可能是調 用這個類的類)看而傷腦筋;或者有可能過一段時間之後會徹底改變原有的做法,並以全新的版本代替舊版本,這種情況下一般會默認。
4、class不可以是private和protected。
6. 簡述 private、 protected、 public、 internal 修飾符的訪問許可權。
public:類或成員可以由同一程序集中的任何其他代碼或引用它的另一個程序集訪問。
private:只能通過同一個類或結構中的代碼訪問類型或成員。
protected:類或成員只能由同一個類中的代碼訪問,或者在從該類派生的類中訪問。
internal:類或成員可以由同一程序集中的任何代碼訪問,但不能從另一個程序集訪問。
(6)protected和默認訪問許可權擴展閱讀:
private、 protected、 public、 internal 修飾符除了可以單獨使用,還可以組合使用。
protected internal:訪問僅限於從包含類派生的當前程序集或類型。
private protected: 訪問僅限於從當前程序集中的包含類派生的包含類或類型。
除了使用protected internal或private protected組合時,成員或類只允許使用一個訪問修
飾符。名稱空間上不允許訪問修飾符。命名空間沒有訪問限制。
根據成員聲明發生的上下文,僅允許某些聲明的可訪問性。如果在成員聲明中未指定訪問修飾
符,則使用默認輔助功能。
頂級類型(不嵌套在其他類型中)只能具有internal或public可訪問性。這些類型的默認可訪
問性是internal。
7. Java中的private,protected,public和default的區別
private:
Java語言中對訪問許可權限制的最窄的修飾符,一般稱之為「私有的」。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
default:即不加任何訪問修飾符,通常稱為「默認訪問模式「。該模式下,只允許在同一個包中進行訪問。
protect:
介於public
和
private
之間的一種訪問修飾符,一般稱之為「保護形」。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
public:
Java語言中訪問限制最寬的修飾符,一般稱之為「公共的」。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。
8. public ,protected, private這三種許可權限定關鍵字的限定的內容訪問范圍是什麼
private關鍵字:只在本類中可以使用
默認:在本類和本包中可以使用
protected關鍵字:在本類、本包和不同包的子類中可以使用
public關鍵字:在所有的類和包中可以使用
即:
Private強調給自己使用
默認強調給同包下的使用
protected強調給子類使用
public給所有用
9. java類中變數如果定義時沒給訪問許可權默認是什麼啊
如果沒有寫就是默認訪問許可權。
java的類有2種訪問許可權,public、默認
而方法和變數有4種:public、默認、protected、private
其中默認訪問許可權和protected很相似,有著細微的差別。
public意味著任何地方的其他類都能訪問
默認則是同一個包的類可以訪問。
protected表示同一個包的類可以訪問,其他的包的該類的子類也可以訪問。
private表示只有自己類能訪問
10. 什麼是Java類的訪問許可權
在解釋訪問許可權控制之前,先看一個場景。在學生信息管理系統中,有兩個類,分別是學生類和課程類,課程類提供了課程表和課程安排兩個方法,學生類可以調用課程類提供的課程表查看課程安排,但不能調用課程安排方法,該如何處理,此時就可以利用訪問許可權來進行控制。
在Java中,提供了四種訪問許可權控制:默認訪問許可權(包訪問許可權),public,private以及protected。
默認訪問許可權(default):即不加任何訪問修飾符,通常稱為「默認訪問模式「。該模式下,只允許在同一個包中進行訪問。
private: 對訪問許可權限制的最窄的修飾符,一般稱之為「私有的」。被其修飾的類、屬性以及方法只能被該類的對象訪問,其子類不能訪問,更不能允許跨包訪問。
protect: 介於public 和 private 之間的一種訪問修飾符,一般稱之為「保護的」。被其修飾的類、屬性以及方法只能被類本身的方法及子類訪問,即使子類在不同的包中也可以訪問。
public: Java語言中訪問限制最寬的修飾符,一般稱之為「公共的」。被其修飾的類、屬性以及方法不僅可以跨類訪問,而且允許跨包(package)訪問。下表列出了四種訪問許可權的控制粒度:
packagecom.cxh.test1;
classPeople{//默認訪問許可權(包訪問許可權)
privateStringname=null;
publicPeople(Stringname)
{
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
}
從代碼可以看出,修飾People類採用的是默認訪問許可權,而由於People類和Main類在同一個包中,因此People類對於Main類是可見的。