package com.access;
class PrintString
{
void print()
{
System.out.println("Hello World!");
}
}
public class TestPackage
{
public static void main(String[] args)
{
PrintString ps = new PrintString();
ps.print();
}
}
javac -d . TestPackage.java
其中:-d表示自动生成包层 . 表示这个包层是在当前目录下建立。java com.access.TestPackage
Hello World!
注意:
(1)package com.access; 表示把该文件的所有的类放入com.access这个包中,并且该文件所有类的真正名字将是包名和类名的组合。例如,类TestPackage 的名字将编程com.access.TestPackage ,而不再是TestPackage 。
(2)编译时建议使用:javac -d . TestPackage.java 尽量不要使用javac TestPackage.java 因为后者要手动的建立包目录。
(3)如果不再当前路径下运行程序,则必须保证class文件的最上层目录的父目录位于classpath下。
例如:包的父目录是D:\JavaProject\demo12。现在要在C:\Users\Administrator目录下运行TestPackage。实现步骤如下:
(1)设置环境变量:C:\Users\Administrator> set classpath=d:\JavaProject\demo12;
注意:classpath=d:\JavaProject\demo12这部分没有空格。
(2)运行:C:\Users\Administrator> java com.access.TestPackage
package access.cookie2;
public class Cookie
{
public Cookie()
{
System.out.println("Cookie constructor");
}
public void bite()
{
System.out.println("bite");
}
}
package access;
public class ChocolateChip2
{
public ChocolateChip2()
{
System.out.println("ChocolateChip2 constructor");
}
public static void main(String[] args)
{
ChocolateChip2 x = new ChocolateChip2();
access.cookie2.Cookie y = new access.cookie2.Cookie();//包名和类名的组合,要使用Cookie类,就必须冠以全名。
y.bite();
}
}
D:\JavaProject\demo11>javac -d . Cookie.java ChocolateChip2.java
D:\JavaProject\demo11>java access.ChocolateChip2
ChocolateChip2 constructor
Cookie constructor
bite
access.cookie2.Cookie y = new access.cookie2.Cookie();
这个写法很不简洁。一旦使用了import语句,在使用类时,就不必写出包的全名了。import java.util.*;
导入java.util包中所有的类。import java.util.Date;
导入java.util包中Date这一特定类。package access.cookie2;
public class Cookie
{
public Cookie()
{
System.out.println("Cookie constructor");
}
public void bite()
{
System.out.println("bite");
}
}
package access;
import access.cookie2.*;
public class ChocolateChip2
{
public ChocolateChip2()
{
System.out.println("ChocolateChip2 constructor");
}
public static void main(String[] args)
{
ChocolateChip2 x = new ChocolateChip2();
Cookie y = new Cookie();
y.bite();
}
}
package access.cookie2;
public class Cookie
{
public Cookie()
{
System.out.println("Cookie constructor");
}
void bite()
{
System.out.println("bite");
}
}
package access;
import access.cookie2.*;
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();
}
}
D:\JavaProject\demo11>javac -d . Cookie.java ChocolateChip2.java
ChocolateChip2.java:13: 错误: 找不到符号
bite();
^
符号: 方法 bite()
位置: 类 ChocolateChip2
1 个错误
package access.cookie2;
public class Cookie
{
public Cookie()
{
System.out.println("Cookie constructor");
}
protected void bite()
{
System.out.println("bite");
}
}
D:\JavaProject\demo11>javac -d . Cookie.java ChocolateChip2.java
D:\JavaProject\demo11>java access.ChocolateChip2
Cookie constructor
ChocolateChip2 constructor
bite
原因:protected修饰的成员方法,可以被同一个包的其他类访问,同时也能被不同包中的子类访问。但是对于其他包中的类而言,却是private的。
以上是针对方法bite()没有重写的情况而言的。如果在子类对bite()进行了重写,以上的问题就不会存在了。说明子类访问的本类重写以后的方法bite,而不是父类的方法bite。
验证protected修饰的成员,不在同一个包,不存在继承时,对于其他包中的类而言,却是private的。
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.*;
public class ChocolateChip2
{
public ChocolateChip2()
{
System.out.println("ChocolateChip2 constructor");
}
public static void main(String[] args)
{
ChocolateChip2 x = new ChocolateChip2();
Cookie y = new Cookie();
y.bite();
}
}
D:\JavaProject\demo11>javac -d . Cookie.java ChocolateChip2.java
ChocolateChip2.java:48: 错误: bite()可以在Cookie中访问protected
y.bite();
^
1 个错误