[學習筆記]Java的public,protected,private,缺省的作用域


0.引言

Java的訪問指示符public,protected,private,缺省可以用來修飾類和方法。

1.作用域如下

具體如下:

 作用域       當前類    同一package   子孫類     其他package

  public            √              √                       √                    √

protected        √              √                       √                    x

缺省("友好")    √              √                       x                    x

 private            √              x                       x                    x

2.同一個java文件里面若有多個類

(1) 每個編譯單元(文件)都只能有一個public 類。每個編譯單元有一個公共接口的概念是由那個公共類表
達出來的。根據自己的需要,它可擁有任意多個提供支撐的“友好”類。但若在一個編譯單元里使用了多個
public類,編譯器就會向我們提示一條出錯消息。(即只能有一個是public修飾,其它為缺省)

(2) 可能(但並常見)有一個編譯單元根本沒有任何公共類。此時,可按自己的意願任意指定文件名。(即可以都是缺省修飾,即無訪問指示符修飾類名)

3.若不願其他任何人訪問那個類

我們現在對於類的訪問只有兩個選擇:“友好的”或者public。若不願其他任何人訪問那個類,可將所有構建器設為private,然后用(singleton)單例模式或者靜態方法獲得此類的實例

//: Lunch.java 
// Demonstrates class access specifiers. 
// Make a class effectively private 
// with private constructors: 
 
class Soup { 
  private Soup() {} 
  // (1) Allow creation via static method: 
  public static Soup makeSoup() { 
    return new Soup(); 
  } 
  // (2) Create a static object and 
  // return a reference upon request. 
  // (The "Singleton" pattern): 
  private static Soup ps1 = new Soup(); 
  public static Soup access() { 
    return ps1; 
  } 
  public void f() {} 
} 
 
class Sandwich { // Uses Lunch 
  void f() { new Lunch(); }
} 
 
// Only one public class allowed per file: 
public class Lunch { 
  void test() { 
    // Can't do this! Private constructor: 
    //! Soup priv1 = new Soup(); 
    Soup priv2 = Soup.makeSoup(); 
    Sandwich f1 = new Sandwich(); 
    Soup.access().f(); 
  } 
} ///:~  

4.例外

同一個Java文件中,我們現在對於類的訪問只有兩個選擇:“友好的”或者public,但是如果是內部類,就可以使用protected和private來修飾。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM