文章目錄
- 1.包:庫元素
- 代碼組織
- 2.Java訪問權限修飾詞
- 包訪問權限
- public:介面訪問權限
- private:你無法訪問
- protected:繼承訪問權限
- 4.類訪問權限
public > protected > 包訪問權限 > private
1.包:庫元素
-
每個編譯單元必須有一個 .java 后綴的同名public類,每個編譯單元只能有這樣的一個public類,其他類用來給主public類提供支持
-
代碼組織
(1) 當編譯一個 .java 檔案時,在 .java 檔案中的滅一個類都會有一個輸出檔案,而該輸出檔案名稱應與 ”.java檔案“每個類名相同,只是多了 .class 后綴(編譯少量 .java 檔案,出現大量 .class 檔案)
(2) Java可運行程式是一組可以打包壓縮成一個Java檔案檔案(JAR,使用java的java檔案生成器)的 .class 檔案
(3) Java解釋器負責這些檔案的 查找、裝載、解釋
(4) package 和 input 關鍵字允許將單一的全域名字空間分割開
2.Java訪問權限修飾詞
-
如果不提供任何訪問修飾詞,則意味著它是包訪問權限
-
包訪問權限
(1) 對于包內其他類都有訪問權限,但對于包外的類則是 private
(2) 取得某成員的訪問權限途徑a. 該成員 public b. 不加訪問修飾符,包內互相訪問 c. 繼承而來的類,可以訪問 public 成員、protected 成員 d. 通過 訪問器(accessor) 和 異變器(mutator)即 get/set成員 -
public:介面訪問權限
(1) 使用關鍵字 public ,則成員每個人都可用
(2) 默認包:兩個類同處于相同的目錄并且沒有給自己設定任何包名稱,java將這樣的檔案自動看作是隸屬于該目錄的默認包中
-
private:你無法訪問
(1) 除了包含該成員類之外,任何類都無法訪問(同一包的其他類也無法訪問,相當于”隔離“)
(2)
class Sundae { private Sundae() { //無參構造器是private的 } static Sundae makeASundae() { return new Sundae(); } } public class IceCream { public static void main(String[] args) { //! Sundae x = new Sundae(); //因為Sundae無參構造器是private的,無法創建! Sundae x = Sundae.makeASundae(); } }(3) 想控制如何創建物件,并且阻止別人直接訪問某個特定構造器(或全部構造器)不能通過構造器創建Sundae物件,而必須呼叫makeASundae()方法來達到此目的,默認構造器是 private ,它阻止此類的繼承
-
protected:繼承訪問權限
(1) 基類創建者會希望某個特定成員,把它的訪問權限只賦予 派生類 而不是所有類
(2)
package Chapter6.Example02.dessert; public class Cookie { public Cookie() { System.out.println("Cookie constructor"); } protected void bite() { System.out.println("bite"); } } ------------------------------------------------------------------------ package Chapter6.Example02; import Chapter6.Example02.dessert.*; public class ChocolateChip extends Cookie { public ChocolateChip() { System.out.println("ChocolateChip constructor"); } public void chomp() { //! bite(); // Cookie.bite()是protected的 } public static void main(String[] args) { ChocolateChip x = new ChocolateChip(); x.chomp(); } }
4.類訪問權限
-
package Chapter6.Example03; // Demonstrates class access specifiers. Make a class // effectively private with private constructors: class Soup1 { private Soup1() { } // (1) Allow creation via static method: public static Soup1 makeSoup() { return new Soup1(); } } class Soup2 { private Soup2() { } // (2) 創建一個物件并回傳一個參考 // upon request.(The "Singleton" pattern): private static Soup2 ps1 = new Soup2(); public static Soup2 access() { return ps1; } public void f() { } } // Only one public class allowed per file: public class Lunch { void testPrivate() { // Can't do this! Private constructor: //! Soup1 soup = new Soup1(); } void testStatic() { Soup1 soup = Soup1.makeSoup(); } void testSingleton() { Soup2.access().f(); } } -
其中Soup2用到了 singleton(單例)設計模式,因為你始終創建了一個物件,Soup2類的物件是作為Soup2的一個static private 成員而創建的所以有且僅有一個,而且除非是通過public方法access(),否則是無法訪問到的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/167040.html
標籤:AI
上一篇:螞蟻二面、京東三面后,我總結了大廠Java高頻面試真題及決議:Java基礎+Spring+演算法+并發+JVM+Redis+MySQL
