java中,
类的权限有两种:
数据成员的权限有四种:
注意,类的权限不可以是
private(这会使得除了该类外,其他任何类都不可以访问它),也不可以是protected。
在说类之前,先明确一下编译单元的概念,一个java源文件就算作一个编译单元。
包访问权限 < public权限。拥有包访问权限的类,对同一个包内的其他类,可以看做表现为"public",
而对包外部的类,则可以看做表现为"private"。
在写了一个java源文件后,可以在它的开头加上package <包名>来将它划分到指定包。
如果不指定,那么它就划分为默认包,可以认为它的包名为"",也即是空。
在创建一个类后,如果不加访问控制符,那么这个类就拥有包访问权限。
拥有包访问权限的类,能被同一个包内的其他类访问,但不能被包外部的代码访问。
不指定包名,则源文件属于默认包(即不指定包名),且是当前目录的默认包。位于相同目录的源文件,如果不指定包名,则属于同一目录的默认包,默认包为同目录的所有其他文件提供了包访问权限。
举个例子:
//Animal.java
package com;
class Animal{
public Animal(){
}
}
这里的Animal类所在文件指定了包名com,所以它属于包com。
它的class前没有权限控制符,所以它拥有包访问权限。
此时如果com中有另一个类Dog:
//Dog.java
package com;
class Dog{
Animal dog;
public Dog(){
dog = new Animal();
}
}
那么它可以访问到这个类,因为Animal有包访问权限。
继续上面的例子,如果有另一个类不在com中,如:package net,那么这个类中无法访问到Animal。
如果想要访问,则需要在class Animal前加上public,此时Animal不再局限于包访问权限,它既可以被包内的其他类访问,也可以被外部的类访问。
public
protected
extends)可以访问,但是其他类不能访问。private
public类,可以有多个拥有包访问权限的类。public类的名字必须与源文件名前缀相同,大小写也要一样,否则会编译出错。
public class LittleDog,则源文件必须为LittleDog.javapackage com.dog;,则它必须位于com/dog/的路径下。package xxx;去掉再运行,如果可以运行,那么说明是 包名和目录路径不对应 导致的错误。在查看一个权限时:
public,则外部可以访问;
