zoukankan      html  css  js  c++  java
  • Java基础 -- 访问控制权限

    一  包:库单元

    假设我们存在两个类名相同的类,如果没有一定的措施对其进行区分,就会无法区别到底使用的是哪一个类。因此java引入了包来进行名字空间管理。

    包(类库)包含有一组类,这些类在单一的名字空间之下被组织在了一起。例如在Java的标准发布中有一个工具库,它被组织在java.util名字空间之下。java.util中有一个叫做ArrayList的类,使用ArrayList的一种方式是用其全名java.util.ArrayList来指定。

    public class FullQulification {
    	  public static void main(String[] args) {
    		java.util.ArrayList list = new java.util.ArrayList();
    	  	System.out.println("测试!");
    	}
    }
    

    这样就会使的程序语句变长了,为此java中引入了import关键字进行了简化。

    import java.util.ArrayList;
    public class FullQulification {
    	  public static void main(String[] args) {
    		ArrayList list = new ArrayList();
    	  	System.out.println("测试!");
    	}
    }
    

    假设我们自己也定义一个ArrayList类,为了和系统的ArrayList类区别开来,我们可以创建一个access.mypackage包,然后在该包下创建一个ArrayList类:

    package access.mypackage;
    
    public class ArrayList {
    	public String toString() {
    		return "ArrayList [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString()
    				+ "]";
    	}	
    	
    }
    

     如果想使用自己定义的ArrayList类,只需要import access.mypackage.ArrayList即可。

    import access.mypackage.ArrayList;
    public class FullQulification {
    	  public static void main(String[] args) {
    		ArrayList list = new ArrayList();
    	  	System.out.println("测试!"+list.toString());
    	}
    }
    

     实际上java包的管理就是文件的管理,包access.mypackage对应的文件路径access/mypackage/。

    .如果想引入别人写好的包,可以直接添加在当前项目src目录下,或者添加在环境变量CLASSPATH中指定的目录下。

    二 Java访问权限修饰符

     访问控制权限,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键字)、private。在编写类库时,尽可能将一切方法都定为private,如果没有指定任意的访问权限,则意味着它是"包访问权限"。

    1、包访问权限

    如果一个类中的成员没有指定访问权限修饰符,则默认是包访问权限,即当前类所属的包中的所有其它类对该成员都有访问权限,但是包之外的所有类,这个成员却是private。

    包访问权限允许将包内所有相关的类组合起来,以使它们彼此之间可以轻松的相互作用。

    2、public

    使用public修饰的成员表示这个成员对每个类都是可用的。

    创建一个access.dessert的包,在该包下创建一个Cookie类:

    package access.dessert;
    
    public class Cookie {
    	public Cookie() {
    		System.out.println("Cookie constructor!");
    	}
    	//默认包访问权限
    	void bite() {
    		System.out.println("bite!");
    	}
    }
    

     在默认包下面创建一个使用Cookie类的程序:

    import access.dessert.*;
    
    public class Dinner {
        public static void main(String[] args) {
            Cookie x = new Cookie();
            //x.bite();    //无法访问,因为bit只向在access.dessert包中的类提供访问权限   
        }
    
    }

    可以看到在默认包之中,无法访问bite()函数。

    3、private

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

    4、protected

    protected是继承访问权限,在父类中(位于包A)声明为protected的成员,可以在子类中(位于包B)使用。如果把上面的bite()函数声明成protected修饰符,并且在默认包中有一个类SubCookie继承于Cookie,则SubCooki类实例可以调用bite()函数。

    package access.dessert;
    
    public class Cookie {
    	public Cookie() {
    		System.out.println("Cookie constructor!");
    	}
    	protected void bite() {
    		System.out.println("bite!");
    	}
    }
    
    import access.dessert.*;
    
    class SubCookie extends Cookie{
    	Egg(){
    		super.bite();
    	}
    }
    
    public class Dinner {
    	public static void main(String[] args) {
    		SubCookie e = new SubCookie();
    	}
    
    }
    

     运行如下:

    Cookie constructor!
    Cookie constructor!
    bite!
    

    三 类访问权限

    1、每个编译单元(文件),只能有一个public类,这表示每个编译单元都有单一的公共接口,用public类来实现。

    2、public类的名称必须完全和含有该编译单元的文件名相匹配。

    3、如果一个编译单元,有多个类,那么只能一个类是public修饰的,其它类只能使用默认修饰符(即包访问权限)。

    参考文献:

    [1]Java编程思想

  • 相关阅读:
    redis消息队列
    redis数据结构及使用场景
    HTTP状态码
    ASP.NET处理管道初谈
    kNN(k邻近算法)
    HeadFirst
    Python学习笔记——进程、线程、网络编程
    Python学习笔记-20180428——处理JSON
    Python学习笔记-20180426
    基于百度地图的 JavaScript API示例学习
  • 原文地址:https://www.cnblogs.com/zyly/p/10544132.html
Copyright © 2011-2022 走看看