• [学习笔记]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来修饰。 

  • 相关阅读:
    5、视图
    4、数据更新
    3、聚合与排序
    2、查询基础
    1、数据库和SQL
    Day-13:组合查询
    Day-12:创建高级联结
    Day-11:联结表
    Day-10:使用子查询
    Day-9:分组数据
  • 原文地址:https://www.cnblogs.com/fanbi/p/7373186.html
Copyright © 2020-2023  润新知