包 package
:包中有一组类,它们在单一的名字空间之下被组织在了一起。
注:当编译一个.java文件时,在.java文件中的每个类都会有一个输出文件,而该输出文件的名称与.java文件中每个类的名字相同,只是多了一个后缀名.class。因此,在编译少量的.java文件之后,会得到大量的.class文件。
取得对某成员的访问权限的唯一途径是:
1.使该成员成为public。
2.通过不加访问权限修饰词并将其他类放置于同一个包内的方式给成员赋予访问权限。
3.继承。可以访问public和protected
4.提供访问器和变异器方法。(也称get/set方法)
public:接口访问权限,外部调用可以访问
private:私有
protected:继承访问权限
类的访问权限:
1. 每个编译单元(文件)都只能有一个public类。
2. public类的名称必须完全与含有该编译单元的文件名相匹配。
3. 虽然不是很常用,但编译单元内完全不带public类也是可能的。
请注意:
类既不可以是private的,也不可以是protected的(内部类是特例),对于类的访问权限,只有两个选择:包访问权限或者public。
如果不希望其他任何人对该类拥有访问权限,可以把所有的构造器都指定为private,从而阻止任何人创建该类的对象,但是有一个例外,就是你在该类的static成员内部可以创建。
案例:
package mete.data;
class Soup1 {
private Soup1() {System.out.println(" in Soup1()");};
//allow creation via static method
public static Soup1 makeSoup() {
return new Soup1();
}
}
class Soup2 {
private Soup2() {System.out.println(" int Soup2()");};
//create a static object and return a reference
//"Singleton pattern"
private static Soup2 ps1 = new Soup2();
public static Soup2 access() {
return ps1 ;
}
public void f() {};
}
//Only one public class allowed per file
public class Lunch {
void testPrivate() {
//can't do this. private Constructor.
//Soup1 soup = new Soup1();
}
void testStatic() {
Soup1 soup = Soup1.makeSoup ();
}
void testSingleton() {
Soup2. access().f();
}
public static void main(String[] args) {
Lunch lunch = new Lunch();
lunch.testPrivate();
lunch.testStatic();
lunch. testSingleton();
}
}