訪問修飾符
Ⅰ 簡述public、private、protected 三種訪問修飾符的區別
public是公共變數的意思 就是在整個程序運行過程中都管用。
private是私有變數的意思 只有類內可直接訪問
protected是受保護變數 類內和子類可直接訪問,
繼承類型意思是說把父類放在哪。
舉例:
class A{
public:
int a1;
protected:
int a2;
private:
int a3;
};
A a;
a.a1;//ok
a.a2;//error
a.a3;//error
class B:public A{
public:
void fb(){
a1;//ok
a2;//ok
a3;//error;
}
};
B b;
b.a1,b.a2,b.a3與a.a1,a.a2,a.a3一樣,因為是class B:public A,相當於把A放到了B的public部分。
如
class B:private A{};
則
b.a1,b.a2,b.a3都error,因為相當於把A全放到了B的private部分,從B來看這三個變數,都是private的。
Ⅱ java 的訪問修飾符是什麼
Java中的訪問修飾符
Java面向對象的基本思想之一是封裝細節並且公開介面。Java語言採用訪問控制修飾符來控制類及類的方法和變數的訪問許可權,從而向使用者暴露介面,但隱藏實現細節。訪問控制分為四種級別:
(1)public: 用public修飾的類、類屬變數及方法,包內及包外的任何類(包括子類和普通類)均可以訪問;
(2)protected: 用protected修飾的類、類屬變數及方法,包內的任何類及包外那些繼承了該類的子類才能訪問(此處稍後解釋),protected重點突出繼承;
(3)default: 如果一個類、類屬變數及方法沒有用任何修飾符(即沒有用public、protected及private中任何一種修飾),則其訪問許可權為default(默認訪問許可權)。默
認訪問許可權的類、類屬變數及方法,包內的任何類(包括繼承了此類的子類)都可以訪問它,而對於包外的任何類都不能訪問它(包括包外繼承了此類的子類)。default重點突出包;
(4)private: 用private修飾的類、類屬變數及方法,只有本類可以訪問,而包內包外的任何類均不能訪問它。
網上一些資料及一些書上用表格對java訪問修飾符做了清楚的總結,如下表所示:
重要總結:通過上面的分析,我們可以看到:
1.public、private和protected對我們來說沒有任何異議。
2. 頂層類只能用public訪問修飾符和default(默認)訪問修飾符修飾,其中用默認修飾符修飾的類(及沒有任何修飾符的類,如class B{})不能被其他包中的類繼承,這也說明了default(默認)訪問修飾符突出的是包許可權
3. protected:本人做了一次實驗,發現在不同包的子類中,new一個父類對象,並用該父類對象去訪問父類中的用protected修飾的類屬變數和方法時不能訪問,而new一個子類對象時,子類對象可以訪問(說明protected修飾的類可以被其他包中的類繼承)。也可以在子類重寫父類的方法中使用super關鍵字調用。這豈不是和上面表格中的總結(紅色對勾)沖突了?本人也是百思不得其解。最後在網上找到了一個相對比較認可的解釋,如下:
protected修飾符的修飾的成員變數和方法也稱為受保護的成員變數和方法, 受保護的成員變數和方法可以在本類或同一個包中的其它類(包括子類)中通過類的實例進行訪問,也可以被同一個包中的類或不同包中的類繼承,但是不能在不同包中的其它類(包括子類)中通過類的實例進行訪問。
4. 如果一個類使用public修飾,那該類的類名必須與他所在的源文件名相同。一個.java源文件中有且只有一個public類,頂層類只能用public和默認修飾符(即無修飾符)修飾;
5.final修飾的類不能被繼承,沒有子類。
6.abstract修飾的類不能被實例化,必須被子類繼承。類只要有一個抽象方法就必定是抽象類,但抽象類不一定要有抽象方法。
最終總結,就一句話:protected修飾符所修飾的類(這句話中指父類)屬成員變數和方法,只可以被子類訪問,而不管子類是不是和父類位於同一個包中。default修飾符所修飾的類屬成員變數和方法,只可被同一個包中的其他類訪問,而不管其他類是不是該類的子類。protected屬於子類限制修飾符,而default屬於包限制修飾符。
Ⅲ JAVA 類有哪些訪問修飾符
public 類: 可以被同一個類、同一個包、不同包的子類、不同包的非子類訪問
預設訪問控制符的:可以被同一個類、同一個包訪問
private類:可以被同一個類訪問
private類:可以被同一個類、同一個包、不同包的子類訪問
Ⅳ JAVA訪問修飾符的含義
public--都可訪問(公有)
private--類內可訪問(私有)
protected--包內和子類可訪問(保護)
不寫(default)--包內可訪問 (默認)
public>protected>default>private
Ⅳ 3. Java中的訪問修飾符包括那幾個
public 公共的
private 私有的
default 默認的
protected 保護的
四個訪問修飾符
Ⅵ java中類成員的訪問修飾符有哪些
一:訪問修飾符:
1.省略訪問修飾符
具有默認的訪問特性,即具有包訪問特性,只能被同一個包中的類使用。
2.public訪問修飾符
用於說明類和類的成員的訪問許可權。這種類叫公有類。在一個文件中只能有一個public類型的類。
例如:Rect和UseImport兩個類,分別在兩個不同的包中。順便回顧一下不同類要用import導入。(哎,一直就沒記住)
//Rect.java
pacakage my;
public class Rect
{
private int a,b;
public void init(int len,int width)
{
a=len;
b=width;
}
public int area()
{
return a*b;
}
}
//UseImport.java
import.my.*;//導入my 包的所有類
public class UseImport
{
public static void main(string[] args)
{
Rect x=new Rect();
x.init(2,3);
System.out.println("矩形面積為:"+x.area());
}
}
3.private
用private修飾的類成員成為私有成員,只能在聲明該成員的類中使用,不能在類外使用。一般通過本類中公有方法進行訪問。
4.protected
protected修飾的類成員為保護成員,可以被三種類使用,分別是該類本身,該類的所有子類,該類同包的其他類,該類的子類。
5.private protected
私有保護成員。可被兩種類使用。分別是:該類本身和該類的所有子類。
二:特徵修飾符
1.abstract:抽象
修飾類為抽象類,修飾方法為抽象方法。只要類中有抽象方法,就必須定義為抽象類。抽象方法只能聲明,不能實現。但是可以在其子類中對抽象方法進行實現。抽象類中也可以包含非抽象方法。
2.final:最終
修飾的類為終止類,不能有子類。修飾變數為終止變數,只可賦值一次。修飾方法為終止方法,不能在子類中更改。如Socket、ServerSocket等都是final類,防止黑客派生子類進行破壞。同時,final與abstract是相互矛盾的。
3.static:靜態
靜態成員無需通過對象調用,可以直接通過類名直接調用。
public class RectArea//輸出6 和 12
{
public static void main(String[] args)
{
System.out.println(area(2,3));
System.out.println(area(3,4));
}
static void area(int a,int b)
{
return a*b;
}
}
4.native
用native修飾的為本地方法。它修飾的方法在程序外部使用其他編程語言編寫。(這個步驟比較多,所以就木有繼續研究了)
5.synchronized
修飾的方法為同步方法。
Ⅶ 訪問修飾符有4個分別是public,private,protected,default。請問下怎麼使用分別什麼時候用
像有些類的方法需要讓子類訪問而不想讓其他的類進行訪問,這樣的方法就需要用protected來修飾,而這樣的情況下不能用public或private取代
簡單地說就是很多個類之間的情況下,這四種修飾符各有各的用途
Ⅷ C中訪問修飾符有哪幾種
public
公有訪問。不受任何限制。private
私有訪問。只限於本類成員訪問,子類,實例都不能訪問。protected
保護訪問。只限於本類和子類訪問,實例不能訪問。internal
內部訪問。只限於本項目內訪問,其他不能訪問。protected
internal
內部保護訪問。只限於本項目或是子類訪問,其他不能訪問
Ⅸ java 三種訪問修飾符各如何使用
public 在任何地方都可訪問 protected同包之間可以訪問非同包子類可以訪問 默認友好類:同包可以訪問 private本類可以訪問
下面是三大修飾符,你也順便看看吧
如果一個類中如果有抽象方法,那麼這個類必須是抽象類 , 抽象類中未必有抽象方法
抽象類抽象方法 抽象類中可以有抽象方法,也可以有實例方法 抽象方法只能聲明,不能實現後面用 ; 結尾
抽象類的子類如果不希望成為抽象類,那麼它就必須去實現父類中所有的抽象方法
抽象類允許定義構造方法
抽象類 只能聲明引用 , 不能創建對象
抽象方法不能與static 一起使用 , abstract 類中的方法必須在子類中重寫 ,並實現多態
Static 只能繼承並重寫父類中方法 , 但是不能實現多態 .
抽象方法不能與final 一起使用 , final 修飾的方法不能夠在子類中覆蓋,而抽象方法是必須要求要在子類中覆蓋的.
抽象類不能與private一起使用,抽象類中的方法都必須要在子類中重寫後實現,而private修飾的方法不能繼承,更談不上重寫覆蓋
Static
靜態的 . 可修飾 : 方法, 成員變數(屬性)
靜態屬性全類共有,由類名調用
靜態方法中只能訪問非靜態的成員(屬性+方法);
靜態方法可以被覆蓋,但是沒有多態
靜態初始化代碼塊
在類載入的時候,執行一次
類載入: 1 . 需要的話,先載入父類(可能父類已經載入過 ,這時候就可以不用載入父類了)
2 . 為靜態屬性分配空間並初始化
3 . 按順序執行靜態初始化代碼塊
Final
可修飾: 變數(局部變數和成員變數) : 賦值後不能再發生改變
方法 : final 修飾後的方法不能被覆蓋 ,但可以繼承
類 : final類不能被子類繼承
Final修飾屬性時候 , 屬性此時沒有默認值. 此時可以初始化屬性值,或者構造方法中賦值
一般情況下常量為 public static , 常量名全部大寫
這是我學習時候的筆記,希望對你有所幫助
Ⅹ java中各種訪問修飾符都有什麼區別 public什麼的
修飾符 當前類 同 包 子 類 其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
類的成員不寫訪問修飾時默認為default。默認對於同一個包中的其他類相當於公開(public),對於不是同一個包中的其他類相當於私有(private)。受保護(protected)對子類相當於公開,對不是同一包中的沒有父子關系的類相當於私有。Java中,外部類的修飾符只能是public或默認,類的成員(包括內部類)的修飾符可以是以上四種。