當前位置:首頁 » 密碼管理 » class訪問許可權

class訪問許可權

發布時間: 2025-06-21 10:03:51

1. C++的類和C裡面的struct有什麼區別

C++中的class和C語言中的struct在使用上有顯著的區別。首先,class中的成員默認訪問許可權是私有的,而struct中的成員默認訪問許可權是公有的。這意味著在class定義中,除非特別聲明為公有或保護,否則成員變數和方法默認是私有的,只有class內部可以訪問它們。而在struct中,除非特別聲明為私有或保護,否則成員默認可以被外部訪問。

其次,class和struct在繼承方面的默認方式也有所不同。class的默認繼承方式是私有繼承,這意味著子類只能訪問基類中公有的成員,而struct的默認繼承方式是公有繼承,這樣子類可以訪問基類中的所有成員,包括私有的。

此外,C++中的類還支持虛函數和虛函數表,這是C語言的struct所不具備的。虛函數和虛函數表使得類可以實現多態性,這是面向對象編程中一個非常重要的特性。虛函數表是一種特殊的數組,用於存儲指向虛函數的指針,它使得通過基類指針或引用可以調用派生類的虛函數。

總之,雖然C++中的class和C語言中的struct都用於封裝數據,但它們在默認訪問許可權、默認繼承方式以及面向對象特性支持等方面存在差異。對於更深入的理解,建議查閱現代編譯原理的相關資料。

2. java 的class 為什麼不可以是protected訪問許可權

1. protected 訪問控制符能被用於方法和成員變數。

2. 聲明為protected的方法和成員變數能被同一個包里的所有類所訪問,就像默認修飾符package一樣。

3. 能被該類的子類所訪問,子類可以和父類不在一個包中。

這樣,當你想讓一個類中的某個方法或成員變數在包中都可見,而且其子類也能訪問(子類有可能和父類不在同一個包中)但又不想讓所有類都可以訪問該類時,就可以用protected修飾符。
可訪問性: public > protected > package >private
注意:
4. But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn』t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.
但是位於與父類不同包中的一個子類,能夠使用其父類中protected成員的途徑只能是,使用子類(或者是子類的子類)的引用。子類和父類在同一個包中則沒有這個限制。這樣就保證了其他包中的類只能訪問它們所繼承的部分成員。
下面的例子可以說明上述幾點:(特別注意第4點)
1 創建一個父類Bird.java,放在birdpack包中,父類中有一個protected int的成員變數nFeathers:
package birdpack; public class Bird { protected int nFeathers; }

2 創建Bird的一個子類Duck1.java,放在ckpack包中,這個程序說明在子類中直接使用父類的protected變數是可以的,父類的protected許可權的成員變數可以被子類繼承:
package ckpack; import birdpack.Bird; public class Duck1 extends Bird { public void setn(int ck1n) { nFeathers = ck1n; } }

3 創建Bird的一個子類Duck2.java,放在ckpack包中,這個程序說明在子類中通過子類的對象訪問父類的protected成員是可以的:
package ckpack; import birdpack.Bird; public class Duck2 extends Bird { public void constructor(int newDuck2) { Duck2 d2 = new Duck2(); //在子類中通過子類的對象訪問父類中的protected變數 d2.nFeathers = newDuck2; } }

4 創建Bird的一個子類Duck3.java,放在ckpack包中,這個程序說明在子類中使用父類的對象訪問父類的protected成員反而是不行的:
package ckpack; import birdpack.Bird; public class Duck3 extends Bird { public void constructor(int newDuck3) { Bird b = new Bird(); //子類中用父類對象反而不能訪問父類中的protected變數 //b.nFeathers = newDuck3; } }

5 創建Bird的一個子類Swan.java,放在ckpack包中,這個程序說明在子類中使用其他子類的對象訪問父類的protected成員也是不行的:
package ckpack; import birdpack.Bird; public class Swan extends Bird { public void constructor(int swan) { Duck1 d1 = new Duck1(); //子類中用另外一個子類的對象也不能訪問父類中的protected變數 //d1.nFeathers = swan; } }

-------------------------------------------------------------------------------------------------------------------------------
轉載這篇文章,主要是為了說明,雖然在java中,父類中protected許可權的成員變數可以被子類訪問,但是還是有條件的,具體如下:
1.在子類中直接使用父類的protected變數是可以的,父類的protected許可權的成員變數可以被子類繼承
2.在子類中通過子類的對象訪問父類的protected成員是可以的
3.在子類中使用父類的對象訪問父類的protected成員反而是不行的
4.在子類中使用其他子類的對象訪問父類的protected成員也是不行的

熱點內容
電腦麥克風和視頻伺服器失敗 發布:2025-06-21 14:22:41 瀏覽:928
java獲取文件的時間 發布:2025-06-21 14:22:34 瀏覽:393
途觀什麼配置都有地台嗎 發布:2025-06-21 14:21:45 瀏覽:327
密碼信函在哪裡可以找到 發布:2025-06-21 14:21:42 瀏覽:395
蘋果商店清理緩存 發布:2025-06-21 14:16:08 瀏覽:77
老婆改了手機密碼說明什麼 發布:2025-06-21 14:14:33 瀏覽:546
外網訪問許可權 發布:2025-06-21 14:12:55 瀏覽:330
一般樓房房門密碼是多少 發布:2025-06-21 13:57:02 瀏覽:291
手機app怎麼上傳伺服器的 發布:2025-06-21 13:54:13 瀏覽:318
蘋果微信怎麼清除緩存 發布:2025-06-21 13:50:38 瀏覽:278