博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java的访问权限
阅读量:5281 次
发布时间:2019-06-14

本文共 2593 字,大约阅读时间需要 8 分钟。

包访问权限:

  这是默认的访问权限,没有任何关键字

  意味着:假设一个类的成员被设置为包访问权限,当前包中的所有其他类都可以访问该成员,但对于这个包之外的所有类,该成员无法被访问。由于一个编译单元只能属于一个包,所以经包访问权限,处于同一个编译单元的所有类彼此之间都是自动可访问的。

 

 

取得某成员的访问权的途径:

 

  1. 使该成员访问权限为public,无论是谁,无论在哪里,都可以访问。
  2. 不加访问权限修饰词(即包访问权限)该成员,将其他需要访问该成员的类置于同一个包内,于是包内的其他类就可以访问该成员。
  3. 使用继承,继承而来的类既可以访问public成员,也可以访问protected成员(但不能访问private成员)。只有两个类都处于同一个包内时,它才可以访问包访问权限的成员。
  4. 提供getXXX()setXXX()方法,以读取和改变数值。

 

 

 

public

 

  public修饰的成员对每个人都是可用的

 

 

 

private

 

  除了包含该成员的类之外,其他任何类都无法访问这个成员

  任何可以肯定只是该类的一个“助手”方法的方法,都可以把它指定为private,以确保不会在包内的其他地方误用它,同样也防止改变或删除这个方法。

 

 

例子:当你编写的类不希望别人直接创建对象时,可以使用private修饰构造器

 

/* * 不能通过构造器来创建Sundae对象,而必须调用makeASundae()来创建 */class Sundae{    private Sundae(){}    static Sundae makeASundae(){        return new Sundae();    }}public class IceCream {    public static void main(String[] args) {        //! Sundae x = new Sundae();        Sundae x = Sundae.makeASundae();    }}

 

 

 

 

protected

 

  继承访问权限

 

  基类把某个特定成员,使得它的子类可以访问该成员,而其他类不能访问,这时需要使用protectedprotected也提供包访问权限,也就是说,相同包内的其他类可以访问protected元素。

例子:

 

package access.cookie2;public class Cookie {    public Cookie(){        System.out.println("Cookie constructor");    }    //若使用包访问权限,那么它的子类(不在同一个包中)无法调用该方法    protected void bite(){        System.out.println("bite");    }}

 

package access;import access.cookie2.Cookie;public class ChocolateChip2 extends Cookie{    public ChocolateChip2(){        System.out.println("ChocolateChip2 constructor");    }        public void chomp(){        bite();    }        public static void main(String[] args) {        ChocolateChip2 x = new ChocolateChip2();        x.chomp();    }}    /*output:Cookie constructorChocolateChip2 constructorbite*/

 

类的访问权限(不包含内部类):

  1. 包访问权限
  2. public

如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但是,你需要在该类的static成员内部创建该对象。

 

ackage access;class Soup1{    private Soup1(){}    public static Soup1 makeSoup(){        return new Soup1();    }}class Soup2{    private Soup2(){}    private static Soup2 ps1 = new Soup2();    public static Soup2 access(){        return ps1;    }    public void f(){}} /*

Soup2用到单例设计模式,因为你始终只能创建它的一个对象。Soup2类的对象是作为Soup2的一个static private成员而创建的,所以有且只有一个,而且除非是通过public方法access(),否则是无法访问到它的。

*/

 

public class Lunch {    void testPrivate(){        // 因为其构造器是private的,所以不能直接new一个对象        //! Soup1 soup = new Soup1();    }        void testStatic(){        Soup1 soup = Soup1.makeSoup();    }        void testSingleton(){        Soup2.access().f();    }}

注意:

如果没能为类访问权限指定一个访问修饰符,它默认得到包访问权限。也就是说,该类的对象可以由包内任何其他类来创建,但在包外则不行。相同目录下的所有不具有明确package声明的文件,都被视作是该目录下默认包的一部分。如果该类的某个static成员是public,则客户端程序员依然可以调用该static成员,尽管他们并不能生成该类的对象。

 

 

 

转载于:https://www.cnblogs.com/aristole/p/8006540.html

你可能感兴趣的文章
软件随笔
查看>>
C/C++知识补充 (1)
查看>>
Fast Poisson Disk Sampling
查看>>
Python Cookbook(第3版)中文版:15.14 传递Unicode字符串给C函数库
查看>>
Linux下SVN自动更新web [转]
查看>>
编程:对经验世界的析构与建构
查看>>
Openstack api 学习文档 & restclient使用文档
查看>>
vim linux下查找显示^M并且删除
查看>>
poj100纪念
查看>>
ExtJs4 笔记(5) Ext.Button 按钮
查看>>
把execl导入到数据库中
查看>>
阿里云人脸比对API封装
查看>>
如何将数据库中的表导入到PowerDesigner中(转)
查看>>
汇编总结一
查看>>
html5-表单常见操作
查看>>
String = ""和String = null的区别
查看>>
C#测试题若干,都是基础阿
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
An easy problem
查看>>
MauiMETA工具的使用(一)
查看>>