日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

public,private,protected访问权限在Java,C++中的解析

發布時間:2025/4/16 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 public,private,protected访问权限在Java,C++中的解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java中:

Java中的訪問權限有public,private,protected和默認的包訪問權限,如果類中的屬性方法沒有顯示的指明訪問權限,則具有包訪問權限,我喜歡稱它為packeged權限,很多人也稱它為friendly訪問權限,而packaged和friendly這兩個關鍵字在實際中都是不存在的。

詳細解釋,我引別人的一篇博客,說明:

java訪問權限修飾符public? protected? friendly private用法總結??

???? 首先聲明:java中,friendly這個修飾符并沒有顯式的聲明,在成員變量和方法前什么修飾符也不用,默認的就是friendly。
??? 為了條理清晰,分三種不同情況來總結。


???一 訪問權限修飾符修飾成員變量和方法
???public:表明該成員變量和方法是共有的,能在任何情況下被訪問。
???
???protected:必須在同一包中才能被訪問。(說的比較簡單,看個例子就明白了)????
?????? eg:class A
????????? {?
??????????? protected int weight ;
??????????? protected int f( int a,int b?? )???
??????????? {
????????????? // 方法體
??????????? }
?????????? }??????
?????? 假設B與A在同一個包中,則
?????????? class B
????????? {
??????????? void g()
??????????? {
????????????? A a=new A();
????????????? A.weight=100;//合法
????????????? A.f(3,4);??? //合法
???????????? }
?????????? }
???特別說明:什么是在同一個包中?
?? 答:用package打包在一起的class ,叫在同一個包中。(不明白,舉個例子)
?????? eg:在JDK的src\java\io中,你會看到許多java類,第一句源代碼都是package java.io;
?????? 沒有使用package打包的,在同一目錄下的類也會被視做同一個包。
???
???friendly:在這種情況下中,同protected。區別在第二和第三種情況中。?
?????? eg: class A
????????? {?
??????????? int weight ;
??????????? int f( int a,int b?? )???
??????????? {
????????????? // 方法體
??????????? }
?????????? }??????
?????? 假設B與A在同一個包中,則
?????????? class B
????????? {
??????????? void g()
??????????? {
????????????? A a=new A();
????????????? A.weight=100;//合法
????????????? A.f(3,4);??? //合法
???????????? }
?????????? }
????private:?只能在本類中訪問。
???????????? eg:??? class?? Test
??????????????????? {??
?????????????????????? private int money;
?????????????????????? Test()
?????????????????????? {
????????????????????????? money=2000;
?????????????????????? }
?????????????????????? private int getMoney()
?????????????????????? {
???????????????????????? return money;
??????????????????????? }
???????????????????? public? static? void main(String args[])
???????????????????? {
???????????????????????? Test te=new? Test();
???????????????????????? te.money=3000;???????????? //合法
???????????????????????? int m=te.getMoney();?????? //合法
???????????????????????? System.out.println("money="+m);
????????????????????? }
???????????????????? }
???????????????????
?? PS: 實際上,把重要的數據修飾為private,然后寫一個public的函數訪問它,正好體現了OOP的封裝特性,是OOP安全性的體現。
???

二? 訪問權限修飾符修飾類
?? 1,不能用protected和private修飾類。
?? 2,用friendly修飾的類叫友好類,在另外一個類中使用友好類創建對象時,要保證它們在同一包中。

三?? 訪問權限修飾符與繼承
?? 這里的訪問修飾符指的是修飾成員變量和方法??梢苑譃閮煞N情況:
?? 1,子類與父類在同一包中
??? 此時只有聲明為private的變量與方法不能被繼承(訪問)。
?? eg:
???? class Father
???? {
?????? private int money ;
?????? int weight=100;
???????
????? }
???? class Son extends Father
???? {
?????? viod f()
?????? {
???????? money=10000;//?? 非法
???????? weight=100; //?? 合法
??????? }
????? }
??? 2,子類與父類不在同一包中
??? 此時private與friendly均不能被繼承(訪問), protected與public可以。
???? eg:
?????? Father.java

????? package com.aaa
????? public class Father
???? {
?????? int height ;
?????? protected? int money=120;
?????? public int weight;
?????? protected int getMoney()
?????? {
???????? return money;
?????? }
?????? void setMoney(int newMoney)
?????? {
???????? money=newMoney;
?????? }
????? }
?????
????? Son.java
????? package com.bbb
????? import com.aaa.Father;
????? public class Son extends Father
????? {
???????? void f()
???????? {
?????????? money=10000;//合法
?????????? //height=170;//非法,height為friendly修飾的變量
?????????? System.out.println(money);//輸出結果是10000
?????????? //setMoney(300);????????? //非法
?????????? int number=getMoney();??? //合法
?????????? System.out.println(number);//輸出結果是10000
????????? }
?????????? public? static? void main(String args[])
????????? {
??????????? Son sss=new Son();
??????????? sss.f();
?????????? }
?????? }
??所以,訪問權限修飾符權限從高到低排列是public? ,protected? ,friendly, private。

?

C++中

由于不存在包的概念,因此,protected與java中的protected有所不同,Java中的protected不但,子對象可以訪問,而且包里的其它地方,也可以顯示的通過子對象調用,如

package pack1

public class A{

???? protected int a;

}

package pack1

public class B{

???? public static void main(String[] args){

????????? System.out.println(a);

???? }

}

上述代碼是沒有問題的,但如果B與A不在同一個包中,則不能訪問。因此,在Java中,protected在可見性在與packaged權限類似,而只是在繼承性上,沒有對包劃界,packaged權限不允許子象訪問其它包內父對象的包訪問權限的屬性。

在C++里,protected屬性有嚴格的定義,即只具有垂直的訪問權限,只有其自身與其后代可以訪問,限一個類的protected屬性,只有其內部與子對象內部可以訪問,而在其它地方是不可見的,為了說明這個問題,見以下代碼:

class A{
protected:?
?int a;
protected:?
?void print(){
??cout<<"A protected method"<<endl;
?}
};
class B:public A{
protected:
?void test(){
??cout<<"test A"<<endl;
?}
};
int main(){
?B b;
?b.test();
?//b.print();
}

上述代碼是無法編譯的,因為b.test()在main里是不可見的,main無法訪問b的protected方法,即使方法是通過子對象來調用的,如果把B中的protected方法改為public,則代碼可以,編譯成功,編譯成功后,在B中可以房問父類的protected屬性.

下表列出了C++三種繼承對屬性的訪問情況:

           public屬性???????? protected屬性????????? private屬性

public繼承??????????????? public????????????? protected?????????????? 不可見

protected繼承??????????protected???????? protected?????????????? 不可見

private繼承      private??????????? private???????????????????不可見


《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的public,private,protected访问权限在Java,C++中的解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。