JAVA编程思想学习总结:第六章——访问权限控制

/*此总结的主要内容是我在学习JAVA过程中,认为需要记忆的知识点。并结合之前自己学习C++及javascript的相关知识,注明JAVA在一些情况下与这两门语言的相同及不同之处。*/

(1)包

类库实际上是一组类文件。其中每个文件都有一个public类,以及任意数量的非public类。因此每个文件都有一个构件。如果希望这些构件从属于同一个群组,就可以使用包。
利用package和import关键字将单一的全局名字空间分割开。
package语句必须是文件中的第一行非注释程序代码。
从根目录开始,解释器获取包名称并将每个句点替换成反斜杠,得到 路径会与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与所要创建的类名称相关的.class文件(包括java解释器所在位置的标准目录)。
如果两个不同的包被同时引用,且包含相同的类名,在引用该类时,在类名前带包名可以解决该同名问题。
忠告:无论何时创建包,都已经在给定包的名称的时候隐含地指定了目录结构。这个包必须位于其名称所指定的目录中,而该目录必须是在以CLASSPATH开始的目录中可以查询到的。

(2)权限修饰词

public:接口访问权限。其成员声明对每个人可用。
默认包:如果类没有给自己设定任何包名称,java将这样的文件自动看作隶属于该目录的默认包中,它为该目录中所有其他的文件都提供了包访问权限。
private:私有访问权限。仅该类本身的成员可以使用private成员。
protected:继承访问权限。对该类的子类也可见,同时也提供包访问权限。
对构造函数使用private可以阻止别人直接访问某个特定的构造器。如果默认构造器是唯一定义的构造器,并且是private,它将阻止此类的继承。
访问权限的控制其实就是下表。
 

同一个类

同一个包

不同包的子类

不同包的非子类

Private

     

Default

   

Protected

 

Public


(3)类的访问权限

1、每个编译单元都只能有一个public类。
2、public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写。
3、编译单元内允许不带public类。
类既不可以是private的(这样会使得除该类之外,其他任何类都不可以访问它),也不可以是protected(该条限制对内部类除外)。所以对于类的访问权限,仅有两个选择:包访问权限或public。如果不希望任何人对该类拥有访问权限,可以把所有构造器指定为private,从而阻止任何人创建该类的对象,但是有一个例外,就是你在该类的static成员内部可以创建。
示例如下:
package accessControl;
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(){//这种特定的模式被称为singleton(单例),因为只能创建它的一个对象,只能通过静态public方法访问
		return ps1;
	}
	public void f(){}
}
public class Lunch {
	void testPrivate(){
		//无法直接创建对象
		//Soup1 soup =new Soup1();
	}
	void testStatic(){
		Soup1 soup =Soup1.makeSoup();
	}
	void testSingleton(){
		Soup2.access().f();
	}
}

你可能感兴趣的:(JAVA)