zoukankan      html  css  js  c++  java
  • 一.Java访问权限饰词(access specifiers) 程序员

    
    Java有public、protect、friendly、private四种访问权限,并且这四访问权限的访问范围越来越小。 
    
    1. friendly 
    
    1) 果一个class内的数据成员或方法没有任何权限饰词,那么它的缺省访问权限就是friendly。同一个package内的其它所有classes都可以访问friendly成员,但对package以外的classes则形同private。 
    
    2)对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件中,虽然没有引入package, 但隶属于相同的default package。 
    
    class Sundae{ 
    //以下两个方法缺省为friendly 
    Sundae(){} 
    Void f() {System.out.println(“Sundae.f()”); 
    } 
    public class IceCream{ 
    public static void main(String[] args){ 
    Sundae x = new Sundae(); 
    x.f(); 
    } 
    } 
    2. public:可以被任何class调用 
    
    3. private:private成员只能在成员所属的class内被调用,如: 
    
    class Sundae{ 
    private Sundae(){}//只能在Sundae class中被调用 
    Sundae(int i) {} 
    static Sundae makASundae() { 
    return new Sundae(); 
    } 
    } 
    public class IceCream{ 
    public static void main(String[] args){ 
    // Sundae class中构造函数Sundae()是private, 
    // 所以不能用它进行初始化 
    //Sundae x = new Sundae(); 
    Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用 
    Sundae z = Sundae.makASundae(); 
    } 
    } 
    4. protected:具有friendly访问权限的同时,又能被subclass(当然包括子孙类,即子类的子类)所访问。即,既能被同一package中的classes访问,又能被protected成员所在class的subclass访问。 
    
    二.Class的访问权限 
    
    1.Class同样具有public、protect、friendly、private四种访问访问权限: 
    
    1)public:在任何地方都可被使用 
    
    2)protect、private:除了它自己,没有任何class可以使用,所以class不能是 
    
    protected或private(inner class除外) 
    
    3) friendly:同一个package中的classes能用 
    
    2. 如何调用构造函数被声明为private的class 
    
    1) 用static函数 
    
    2) 用Singteton模式 
    
    class Soup{ 
    private Soup(){} 
    //(1)静态函数方法 
    public static Soup makeSout(){ 
    return new Soup(); 
    } 
    //(2)The "Singleton" pattern: 
    
    private static Soup ps1 = new Soup(); 
    public static Soup access(){ 
    return ps1; 
    } 
    public void f(String msg){ 
    System.out.println("f(" + msg + ")"); 
    } 
    } 
    public class Lunch{ 
    public static void main(String[] args){ 
    //Soup priv1 = new Soup();编译错误 
    Soup priv2 = Soup.makeSout(); 
    Soup priv3 = Soup.access(); 
    priv2.f("priv2"); 
    priv3.f("priv3"); 
    }
  • 相关阅读:
    机器学习的分类与主要算法对比
    关于在JSP页面中为什么一定要用${pageContext.request.contextPath}来获取项目路径,而不能用${request.contextPath}?
    Spring Boot静态资源处理
    Tomcat关闭后,重新启动,session中保存的对象为什么还存在解决方法
    Tomcat 7源码学习笔记 -9 tomcat重启后session仍然保留
    mysql-sql语句中变量的使用
    js检测对象中是否存在某个属性
    mysql :=和=的区别
    sql面试题(学生表_课程表_成绩表_教师表)
    ddd
  • 原文地址:https://www.cnblogs.com/sallon/p/2551657.html
Copyright © 2011-2022 走看看